【发布时间】:2021-09-04 16:41:12
【问题描述】:
这更像是一个请帮助我理解的问题,而不是调试问题。所以,我最近开始研究 C 语言,在使用指针一段时间的过程中遇到了这种情况。
#include <stdio.h>
int main()
{
char *name="Bob";
for(int i=0;i<3;i++)
{
printf("Address is %0x and value is %ld",name,*name);
printf("\n");
name++;
}
printf("\n");
return 0;
}
我运行了 3 次程序,得到了类似 -->
的输出Address is 9a756008 and value is 66
Address is 9a756009 and value is 111
Address is 9a75600a and value is 98
Address is ba49d008 and value is 66
Address is ba49d009 and value is 111
Address is ba49d00a and value is 98
Address is 2cb44008 and value is 66
Address is 2cb44009 and value is 111
Address is 2cb4400a and value is 98
我的问题是:内存每次都是随机分配的,那么为什么所有三种情况下的最后三位数字(每次运行程序都得到相同的结果)相同?内存分配有固定的规则吗?
感谢任何信息。谢谢! :)
【问题讨论】:
-
"内存是每次随机分配的" --> 不,不是随机的。 “内存分配有固定的规则吗?” --> C 没有指定固定的规则。
-
这只是您的操作系统选择的方式。它有一个很好的理由或“规则”,但你不知道它是什么,也不应该指望它是任何特定的方式,因为它可以在任何重新启动时甚至在任何时候改变。
-
@chux-ReinstateMonica:是的,它是随机的。好的现代系统使用address space layout randomization。
标签: c pointers memory-address