Memory 内存地址占用内存吗?

Memory 内存地址占用内存吗?,memory,memory-management,memory-address,Memory,Memory Management,Memory Address,我对编程相当陌生,并开始学习内存分配的细节。最近我想到的一个问题,我还没有找到一个明确的答案,那就是内存地址本身会占用内存吗。例如,在32位系统中,我的理解是,每个地址包含4个字节,它们通常指内存中能够存储1个字节数据的空“bucket”。这是否意味着对于32位系统中的每个内存位置,我们实际上使用了5个字节的内存(即4个字节表示地址,1个字节表示空存储桶)?我确信我在这里遗漏了一些东西,但任何澄清都将不胜感激。谢谢 要引用内存地址,您需要以某种方式表示该内存地址,而在32位系统上,内存引用实际上

我对编程相当陌生,并开始学习内存分配的细节。最近我想到的一个问题,我还没有找到一个明确的答案,那就是内存地址本身会占用内存吗。例如,在32位系统中,我的理解是,每个地址包含4个字节,它们通常指内存中能够存储1个字节数据的空“bucket”。这是否意味着对于32位系统中的每个内存位置,我们实际上使用了5个字节的内存(即4个字节表示地址,1个字节表示空存储桶)?我确信我在这里遗漏了一些东西,但任何澄清都将不胜感激。谢谢

要引用内存地址,您需要以某种方式表示该内存地址,而在32位系统上,内存引用实际上需要4个字节。所以对于任何可寻址的内存地址,内存中的其他地方有4个字节具有该地址

但这并不级联到x5乘法,因为程序不需要引用内存的每个字节。它只需要内存中某个东西的起始地址,然后就可以通过算术运算找到“某个东西”的每个字节


举个例子:内存中有一个字符串
justinfoss
。它位于地址0x10000000,并且该地址存储在一个变量中。因此,实际变量值为0x10000000,指向字符串
justinfoss
。但在0x10000000时,您只有一个字节,
J
。在0x10000001处有
u
,在0x10000002处有
s
,依此类推。您的应用程序不需要为每个字符指定一个变量,它只需要在字符串开头添加一个变量(4字节)。对象(字段)也是一样:您只存储对象开始的地址,编译器知道如何通过添加必要的偏移量来进行算术运算以找到所需的字段。一般来说,内存对象相当大,程序中的几个4字节变量引用了相当多的内存。

(冒着过于简化的风险)内存是顺序的。地址123是系统中第一个(第零个)字节的第123字节。没有专门用于指示字节123为123的内存。之后的字节是124。

如果在内存中存储某个内存地址,则它会占用存储内存地址所需的空间。尽管没有存储内存地址的元内存存储器。这是在硬件中处理的。读啊哈!非常感谢。我还没有完全看完,但我想第二篇文章特别告诉了我我需要知道的。所以,我理解这样一种想法,如果我们要,比如说,在变量中存储字符串,我们实际上是在存储该字符串的第一个字节的地址,它的其余部分可以线性访问,直到我们到达一个空字符。澄清一下,我想知道的不是我们在程序中存储对内存中某个位置的引用时使用了多少内存,而是内存中的每个位置都固有地使用内存本身来存储数据,即它的唯一地址。再一次,我确信我遗漏了一些东西,所以如果这听起来像一个愚蠢的问题,我道歉。谢谢