2013-10-04 34 views
-1

据我了解一个字节由8位或字节的,它有一个地址分配给它我的问题是,如果我要了2个字我收到那么4个不同的地址,还是我得到一个地址对于整个Word?任何解释将不胜感激。感谢多存储器地址

+0

你在问一个棘手的问题。一个词是一组字符。你有一个指向开始的地址,但是每个字符都有它自己的地址,但是指向char数组的指针仍然指向位置0。 – Chemistpp

+0

你应该更具体,通过显示你的代码。 ''如果我要求2个单词“''是什么意思? –

+0

C和C++以'char's不是字节计数。取决于您的平台,“char”可以是7,8,9,16位或其他任何内容。 – syam

回答

1

如果做了分配,然后作为一个整体有一个地址的分配,以及每个字节中它也有一个地址。

在分配的第一个字节的地址是等于分配的地址,其余字节具有连续地址从那里向上计数。

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

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

+0

谢谢你的明确答案。所以如果我想分配一个像这样的'char s [] =“test”',我会得到一个整个数组的地址,但也会得到s [0],s [1],s [2],s [ [4]'对吗? –

+0

@LeandroVillagran:是的,'s [0]'...'s [3]'将会有值''t'',''e'',''s'',''t''和' s [4]'将具有值'0'(它是nul终止字符)。你也可以看到'sizeof(s)'是'5'。 –

+0

谢谢你的解释@Steve Jessop我真的很困惑,但现在我明白了 –

2

通常认为任何对象或变量的“地址”是该变量中第一个(最低)字节的地址。所以,如果你有一个类型为std :: uint64_t(8字节)的变量,则指向该变量的指针将是它的第一个字节,而下面的7个地址包含其他7个字节。现在,为了其中这些字节存储取决于具体的实现(查找小端与大端架构)。

希望有所帮助。

+0

感谢这加强了@Steve Jessop的答案,我实际上昨天才了解到litte和big endian。谢谢Limne –

-1

有错过如[3],这是“t'.and S [4],它是 '\ 0'

0

在C中,除位字段的所有对象都从一个或多个字节制成:

C 2011(N1570)6.2.6.1表示“除了位字段,对象由一个或多个字节的连续序列组成,它们的数量,顺序和编码是明确指定的,所定义。”

当您访问由多对象ple字节,例如int(通常),则会为您访问该对象的所有字节。

对于天然地由所述处理器的硬件支持的任何物体,也有采取单个地址,但是,从该地址开始多个字节操作加载和存储指令。例如,有“加载字”指令从一个字节的地址开始加载四个字节。 (关于“单词”的大小没有标准;它因计算机体系结构而异。)对于由C实现创建的对象(例如具有多个成员的结构体对象),C实现必须使用多条指令加载和存储对象的所有部分。