我有一个C程序执行以下两个操作:
struct element *e = (struct element*) malloc(sizeof(struct element));
long unsigned addr = (long unsigned) e;
由此,addr
具有指针的十进制值。我可以将addr
转换回元素指针并使用它来从内存中获取元素。
我想知道有多少可能的值addr
。我知道long unsigned
的最大值约为43亿,但我真的可以addr
值 1 吗?我可以得到一定数量的数字吗?如果有的话,该范围取决于什么?
答案 0 :(得分:2)
某些地址是为操作系统(OS)保留的,通常位于低内存地址中。但是你不应该对你的数据所具有的地址 * 感兴趣,因为它们是由操作系统决定的,因此是依赖于操作系统的,而且非常依赖于操作系统的当前状态(执行了许多程序的操作系统的行为与执行程序很少的程序不同,并且在这两种情况下为程序提供不同的地址。)
在C : Memory layout of C program execution中阅读更多内容。
使用intptr_t
(<stdint.h>
)作为地址,正如BLUEPIXY所说(more)。
我有一个执行
的C程序struct element *e = (struct element*) malloc(sizeof(struct element));
Do I cast the result of malloc?不!
*除非您正在编写操作系统代码或没有操作系统的嵌入式代码,否则很可能会对Carey Gregory所说的数据地址或其他特殊情况感兴趣。