我正在开发一个OS项目,我只是想知道指针是如何存储在内存中的?我知道指针是4个字节,那么指针如何在4个字节之间扩展?
我的问题是,我正在尝试存储指向4字节内存插槽的指针。可以说指针是0x7FFFFFFF。什么存储在4个字节的每一个?
答案 0 :(得分:5)
您应该阅读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;
}
答案 1 :(得分:5)
指针的存储方式与任何其他多字节值相同。根据系统的字节顺序存储4个字节。假设4个字节的地址如下:
Big endian(最重要的字节优先):
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 = π // from the above example, int ppi == 0x1000
简单的指针算法可以获得指向每个字节的指针。