内存中某个地址的位置的最小大小是多少?
What is the minimum size of a location at an address in memory?
我正在学习编程。我们刚刚介绍了变量。我们被告知他们引用内存中的地址。该地址的大小是多少?即地址13221和地址13222是8位分隔的吗? 16? 32?每个单独的位都有地址吗?
如果尺寸不同,具体尺寸是由硬件决定的吗?磁盘格式?操作系统? Compiler/interpreter?
如果我只在 16 位 space 中存储一个字节的数据,那是如何实现的?它是通过将最左边的 8 位默认为 0 来完成的,比如通过以 10 为底的比较将“12”写为“0012”吗?大小是否灵活以利用那些未使用的存储块space?
在某些方面,你的问题太宽泛了,因为内存布局首先取决于硬件,然后是操作系统限制,然后是编译器,最后是你写的软件。在Intel/AMD 平台中,一个地址指向一个特定的字节。每个bye由8位组成。 Intel 和平台是小尾数法,所以最低有效位在前。
寄存器是硬件的基础"variable"。寄存器的大小是固定的。当您存储的字节数少于寄存器大小时,由您决定发生了什么:您使用的硬件指令决定是扩展符号位,还是重置剩余位...
当你在一个宽变量中存储一个小数字时,编译器会根据操作数的类型,选择合适的硬件指令来执行你所要求的。因此,您可以将字节 5 存储在一个 int32 变量中:编译器将使用 "byte to byte" 存储指令,该指令会将所有额外的 3 个字节设置为零。
are address 13,221 and address 13,222 separated by 8 bits? 16? 32?
8 位,几乎总是
Does every individual bit have an address?
不,只有字节。一种使用其他方法来获取特定位的值。
If the size varies, is the specific size determined by hardware? Disk format? Operating system? Compiler/interpreter?
大小不变,并且很大程度上取决于硬件。
If I'm only storing a byte of data in a 16 bit space, how is that implemented? Is it done by defaulting the leftmost 8 bits to 0, like writing '12' as '0012' by way of a base 10 comparison?
我不太明白你所说的 16 位 space 是什么意思。如果你正在考虑一个 2 字节的内存,每个字节都有一个地址(就像在每个内存中一样),如果一个字节被写入,它被写入计算机给定的地址。所以在 16 位内存中,地址 0 和 1 有两个字节。
但也许你的意思是 "if I have the address of 16 bits word and I use it to write a byte, where will it be written?"。
实际上,这取决于计算机。在某些计算机中,字的地址是其最低有效字节的地址(它们被称为 小端 并且 x86 体系结构具有此特征),而对于其他人来说,字的地址是它的最高有效字节和最低有效字节位于下一个地址(big endian 计算机)。许多计算机可以在启动时 select 其 endianness。实际上,这是一个约定俗成的问题(比如从右到左或从左到右书写),但它具有深刻的编程含义。在应该包含 2 个字节的地址(short
在 C 中)写入一个字节(char
在 C 中)会使程序不可移植并且强烈建议不要这样做,除非你真的 知道你在做什么。如果正确遵守数据类型,您不必担心字节在内存中的排列方式。
Is the size flexible somehow to utilize those unused chunks of storage space?
计算机为变量分配space。根据变量的种类,您有特定的 space 保留。例如,在 C 中,一个 char
存储在一个字节中,一个 short
存储在两个字节中,一个 int
在大多数情况下存储在 4 个字节中,等等。这确保了任何值得到这个变量,如果它遵守其类型的约束(例如 unsigned char
必须介于 0 和 255 之间),它将被正确地写入内存。所以不是"unused"space。添加 "flexibility",会使内存管理完全无法工作。
我正在学习编程。我们刚刚介绍了变量。我们被告知他们引用内存中的地址。该地址的大小是多少?即地址13221和地址13222是8位分隔的吗? 16? 32?每个单独的位都有地址吗?
如果尺寸不同,具体尺寸是由硬件决定的吗?磁盘格式?操作系统? Compiler/interpreter?
如果我只在 16 位 space 中存储一个字节的数据,那是如何实现的?它是通过将最左边的 8 位默认为 0 来完成的,比如通过以 10 为底的比较将“12”写为“0012”吗?大小是否灵活以利用那些未使用的存储块space?
在某些方面,你的问题太宽泛了,因为内存布局首先取决于硬件,然后是操作系统限制,然后是编译器,最后是你写的软件。在Intel/AMD 平台中,一个地址指向一个特定的字节。每个bye由8位组成。 Intel 和平台是小尾数法,所以最低有效位在前。
寄存器是硬件的基础"variable"。寄存器的大小是固定的。当您存储的字节数少于寄存器大小时,由您决定发生了什么:您使用的硬件指令决定是扩展符号位,还是重置剩余位...
当你在一个宽变量中存储一个小数字时,编译器会根据操作数的类型,选择合适的硬件指令来执行你所要求的。因此,您可以将字节 5 存储在一个 int32 变量中:编译器将使用 "byte to byte" 存储指令,该指令会将所有额外的 3 个字节设置为零。
are address 13,221 and address 13,222 separated by 8 bits? 16? 32?
8 位,几乎总是
Does every individual bit have an address?
不,只有字节。一种使用其他方法来获取特定位的值。
If the size varies, is the specific size determined by hardware? Disk format? Operating system? Compiler/interpreter?
大小不变,并且很大程度上取决于硬件。
If I'm only storing a byte of data in a 16 bit space, how is that implemented? Is it done by defaulting the leftmost 8 bits to 0, like writing '12' as '0012' by way of a base 10 comparison?
我不太明白你所说的 16 位 space 是什么意思。如果你正在考虑一个 2 字节的内存,每个字节都有一个地址(就像在每个内存中一样),如果一个字节被写入,它被写入计算机给定的地址。所以在 16 位内存中,地址 0 和 1 有两个字节。
但也许你的意思是 "if I have the address of 16 bits word and I use it to write a byte, where will it be written?"。
实际上,这取决于计算机。在某些计算机中,字的地址是其最低有效字节的地址(它们被称为 小端 并且 x86 体系结构具有此特征),而对于其他人来说,字的地址是它的最高有效字节和最低有效字节位于下一个地址(big endian 计算机)。许多计算机可以在启动时 select 其 endianness。实际上,这是一个约定俗成的问题(比如从右到左或从左到右书写),但它具有深刻的编程含义。在应该包含 2 个字节的地址(short
在 C 中)写入一个字节(char
在 C 中)会使程序不可移植并且强烈建议不要这样做,除非你真的 知道你在做什么。如果正确遵守数据类型,您不必担心字节在内存中的排列方式。
Is the size flexible somehow to utilize those unused chunks of storage space?
计算机为变量分配space。根据变量的种类,您有特定的 space 保留。例如,在 C 中,一个 char
存储在一个字节中,一个 short
存储在两个字节中,一个 int
在大多数情况下存储在 4 个字节中,等等。这确保了任何值得到这个变量,如果它遵守其类型的约束(例如 unsigned char
必须介于 0 和 255 之间),它将被正确地写入内存。所以不是"unused"space。添加 "flexibility",会使内存管理完全无法工作。