c中可以存在多少个指针值组合?

时间:2017-07-01 22:29:24

标签: c pointers memory memory-address memory-layout

我有一个C程序执行以下两个操作:

struct element *e = (struct element*) malloc(sizeof(struct element));
long unsigned addr = (long unsigned) e;

由此,addr具有指针的十进制值。我可以将addr转换回元素指针并使用它来从内存中获取元素。

我想知道有多少可能的值addr。我知道long unsigned的最大值约为43亿,但我真的可以addr 1 吗?我可以得到一定数量的数字吗?如果有的话,该范围取决于什么?

1 个答案:

答案 0 :(得分:2)

某些地址是为操作系统(OS)保留的,通常位于低内存地址中。但是你不应该对你的数据所具有的地址 * 感兴趣,因为它们是由操作系统决定的,因此是依赖于操作系统的,而且非常依赖于操作系统的当前状态(执行了许多程序的操作系统的行为与执行程序很少的程序不同,并且在这两种情况下为程序提供不同的地址。)

C : Memory layout of C program execution中阅读更多内容。

使用intptr_t<stdint.h>)作为地址,正如BLUEPIXY所说(more)。

  

我有一个执行struct element *e = (struct element*) malloc(sizeof(struct element));

的C程序

Do I cast the result of malloc?不!

*除非您正在编写操作系统代码或没有操作系统的嵌入式代码,否则很可能会对Carey Gregory所说的数据地址或其他特殊情况感兴趣。