指针在内存中是如何存储的?

4

我正在进行一个操作系统项目,我想知道指针在内存中是如何存储的?我知道指针是4个字节,那么这4个字节是如何分配的呢?

我的问题是,我试图将一个指针存储到一个4字节的内存空间中。假设指针是0x7FFFFFFF。每个字节中存储了什么内容?


1
如果操作系统正在映射虚拟内存,则完全取决于硬件体系结构和操作系统。 - Jason Coco
2个回答

5
你应该了解一下字节序(Endianness)Endianness。但通常情况下,你不会只使用指针的一个字节,因此字节的顺序并不重要。 更新:以下是构造一个伪指针并打印其每个字节的示例:
#include <stdio.h>

int main(int arc, char* argv[]) {
  int *p = (int *) 0x12345678;
  unsigned char *cp = (unsigned char *) &p;

  int i;
  for (i = 0; i < sizeof(p); i++)
    printf("%d: %.2x\n", i, cp[i]);

  return 0;
}

5

指针的存储方式与其他多字节值相同。这4个字节根据系统的字节序进行存储。假设这4个字节的地址如下:

大端(最高有效字节在前):

Address       Byte
0x1000        0x7F
0x1001        0xFF
0x1002        0xFF
0x1003        0xFF

小端(最低有效字节优先):
Address       Byte
0x1000        0xFF
0x1001        0xFF
0x1002        0xFF
0x1003        0x7F

顺便提一下,4字节地址是32位系统,64位系统有8字节地址。

编辑: 要引用指针的每个单独部分,您需要使用指针。 :) 假设您有:

int i = 0;
int *pi = &i; // say pi == 0x7fffffff
int **ppi = &pi; // from the above example, int ppi == 0x1000

简单的指针算法可以让你得到每个字节的指针。

太棒了!这正是我所需要的。现在,如果给我一个指针,我该如何引用每个单独的部分,比如0x7F、0xFF等等? - Tesla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接