Memory 内存中某个地址的最小位置大小是多少?

Memory 内存中某个地址的最小位置大小是多少?,memory,byte,data-storage,Memory,Byte,Data Storage,我只是在学习编程。我们只讨论了变量。我们被告知,它们引用内存中的地址。那个地址有多大?也就是说,地址13221和地址13222是否由8位分隔?16? 32? 每个位都有地址吗 如果大小不同,具体大小是否由硬件决定?磁盘格式?操作系统?编译器/解释器 如果我只在16位空间中存储一个字节的数据,那该如何实现呢?它是通过将最左边的8位默认为0来完成的,比如通过10进制比较将“12”写入“0012”吗?在某些方面,你的问题太广泛了,因为内存布局首先取决于硬件,然后取决于操作系统限制,然后取决于编译器,最

我只是在学习编程。我们只讨论了变量。我们被告知,它们引用内存中的地址。那个地址有多大?也就是说,地址13221和地址13222是否由8位分隔?16? 32? 每个位都有地址吗

如果大小不同,具体大小是否由硬件决定?磁盘格式?操作系统?编译器/解释器


如果我只在16位空间中存储一个字节的数据,那该如何实现呢?它是通过将最左边的8位默认为0来完成的,比如通过10进制比较将“12”写入“0012”吗?在某些方面,你的问题太广泛了,因为内存布局首先取决于硬件,然后取决于操作系统限制,然后取决于编译器,最后取决于你编写的软件。在Intel/AMD平台中,地址以特定字节为目标。每个字节由8位组成。英特尔和平台都是小端,所以最低有效位排在第一位

寄存器是硬件的基本“变量”。寄存器的大小是固定的。当您存储的字节数少于寄存器大小时,由您决定发生了什么:您使用的硬件指令决定是扩展符号位,还是重置剩余的位

当您在宽变量中存储一个小数字时,编译器将根据操作数的类型选择适当的硬件指令来执行您所要求的操作。因此,您可以将字节5存储在int32变量中:编译器将使用“字节到字节”存储指令,该指令将所有额外的3个字节设置为零

地址13221和地址13222是否由8位分隔?16? 32?

8位,几乎总是

每个位都有地址吗

不,只有字节。一种方法使用其他方法来获取特定位的值

如果大小不同,具体大小是否由硬件决定?磁盘格式?操作系统?编译器/解释器

大小没有变化,并且它严重依赖于硬件

如果我只在16位空间中存储一个字节的数据,那该如何实现呢?它是通过将最左边的8位默认为0来完成的,比如通过10进制比较将“12”写入“0012”吗

我真的不明白你说的16位空间是什么意思。如果您考虑的是2字节内存,则每个字节都有一个地址(就像在每个内存中一样),如果写入一个字节,则它将写入计算机给定的地址。所以在16位内存中,地址0和1处有两个字节

但也许你的意思是“如果我有16位字的地址,我用它来写一个字节,它将被写在哪里?”。 实际上,这取决于计算机。在一些计算机中,单词的地址是其最低有效字节的地址(它们被称为小端字节,x86体系结构具有此特征),而在另一些计算机中,单词的地址是其最高有效字节,最低有效字节位于下一个地址(大端字节计算机)。许多计算机可以在启动时选择它们的端点。实际上,这是一个惯例问题(就像从右向左或从左向右书写),但它有着深刻的编程含义。在一个地址写入一个字节(
char
,在C中)以容纳2个字节(
short
,在C中)会使程序不可移植,因此强烈建议不要这样做,除非您真的知道自己在做什么。如果正确地考虑了数据类型,就不必担心字节在内存中的排列方式

大小是否可以灵活地利用这些未使用的存储空间块


计算机为变量分配空间。根据变量的类型,可以保留特定的空间。例如,在C语言中,
char
存储在一个字节中,
short
存储在两个字节中,
int
大部分时间存储在4个字节中,等等。这确保了无论哪个值得到这个变量,只要它遵守其类型的约束(例如
无符号char
必须介于0和255之间),它将被正确地写入内存中。因此,它不是“未使用”的空间。增加“灵活性”,将使内存管理完全不可行

这很有帮助。非常感谢。