C中有多个内存地址

时间:2013-10-04 00:24:23

标签: c++ c memory-management computer-science

据我所知,一个字节由8位或字节组成,并且它有一个地址分配给它我的问题是,如果我要求2个字,我得到4个不同的地址,或者我得到一个地址的整个字?任何解释将不胜感激。感谢

4 个答案:

答案 0 :(得分:2)

通常认为任何对象或变量的“地址”是该变量中第一个(最低)字节的地址。因此,如果您有一个类型为std :: uint64_t(8字节)的变量,则指向该变量的指针将指向它的第一个字节,而后面的7个地址包含其他7个字节。现在,存储这些字节的 order 取决于您的实现(查看little-endian与big-endian架构)。

希望有所帮助。

答案 1 :(得分:1)

如果进行分配,那么整个分配就有一个地址,其中的每个字节也都有一个地址。

分配中第一个字节的地址等于分配地址,其余字节的连续地址从那里开始计数。

“进行分配”这里包括全局变量,自动变量,newmalloc,为特定用途分配内存的任何内容。要使用技术术语,C和C ++中的每个对象都是一系列具有连续地址的字节。

如果您的系统使用虚拟内存(几乎所有内容都使用虚拟内存),则地址在虚拟地址空间中是连续的。它们不需要在物理内存中连续,但是虚拟内存的重点在于你(程序员)可以忽略物理内存中的物体。

答案 2 :(得分:0)

在C中,除了位字段之外的所有对象都是由一个或多个字节组成的:

  

C 2011(N1570)6.2.6.1说“除了位字段,对象由一个或多个字节的连续序列组成,其数量,顺序和编码要么是明确指定的,要么是实现定义的。”

当您访问由多个字节组成的对象(例如int(通常))时,将为您访问该对象的所有字节。

对于处理器硬件本机支持的任何对象,存在加载和存储指令,这些指令采用单个地址但在从该地址开始的多个字节上运行。例如,存在“加载字”指令,其从一个字节的地址开始加载四个字节。 (“单词”的大小没有标准;它从一个计算机体系结构到另一个计算机体系结构不同。)对于由C实现创建的对象(例如具有多个成员的结构对象),C实现必须使用多个指令加载和存储对象的所有部分。

答案 3 :(得分:-1)

错过了s [3],这是'和s [4],它是' \ 0'