一个地址需要多少字节?

Dav*_*log 5 c memory

基本上我的问题是单个地址需要/有多少字节?

我的意思是 achar在我的平台上占用 1 个字节并有 1 个地址。但 anint需要 4 个字节。这需要多少个地址int?它仍然只有 1 个地址还是有 4 个地址?

例如 :

char c = 'A'; //Address at 0xdeadbeee
int i = 45846; //Address at 0xdeadbeef
int* iPtr = &i;
iPtr++; //Address at 0xdeadbef3 now
Run Code Online (Sandbox Code Playgroud)

0xdeadbeef和之间的地址会发生什么情况0xdeadbef3?它们都是预留的吗i?当我指向0xdeadbeee(应该是一个地址|字节或下面的任何内容i)并更改它的值时, i 会发生什么?

编辑:对于那些仍然会回答的人,我不想知道整数有多大。我想知道当占用 4 个字节的内存时它是否也有 4 个地址,以及当更改这些地址之一的值时会发生什么(如果它有 4 个地址)。

我希望现在更清楚了。

rjp*_*rjp 3

内置类型(char、short、int、long)的大小是特定于实现和平台的。如果我们假设您的 int 是 32 位,那么我们可以解决您的一些问题:

如果i驻留在0xdeadbeef,则0xdeadbeef, 0xdeadbef0, 0xdeadbef1, and 0xdeadbef2字节地址将全部用于存储i。如果您要设置iPtr0xdeadbeee写入一个值,0xdeadbeee则以下三个地址将包含您写入的值。如果您随后尝试读取ci,您会发现该值已损坏。

需要考虑的一些事情:并非所有架构都允许字节寻址。Achar在您的系统上可能是 1 个字节,但由于限制,可能会保留 4 个字节。同样,您可能无法读取或写入指向非对齐地址的指针。例如,只能访问 32 位边界内存的系统只能访问0xdeadbeec0xdeadbef0