动态变量可以具有的位置是否有限制,静态变量是否有所不同? 进程的内存中是否存在不能分配动态变量而可以分配静态变量的分区?
我正在使用C语言的在线IDE,并try 使用指针,这时我注意到动态分配的变量在打印时方向似乎更短. (示例)
- 静态变量指针:0x7ffc49f6fbe4
- 动态变量指针:0x15512a0
起初,这让我认为动态变量的指针比静态变量的指针小. 我try 了一些方法来了解情况是否如此:首先,我try 查看各种类型的指针,以了解这是否仅适用于动态变量. 然后,我try 了使用动态和静态变量指针的sizeof():
int a;
int *b=malloc(sizeof(int));
printf("%lu\n%lu",sizeof(&a),sizeof(b));
两者都返回了8个字节.我计算了打印的十六进制值中的字节数.静态变量有16个十六进制数字=8个字节,而动态变量有7个十六进制数字=4个字节.字节的减半给了我另一个 idea :也许静态和动态方向在内存中有不同的部分可以分配,所以当我打印动态指针的方向时,它不会费心给我整个方向,只打印动态指针可以占用的部分.当我将方向加1时,这一点得到了加强,最后一个十六进制在两个指针中都发生了变化.如果我添加了足够的内容,迫使 fingerprint 显示另一个数字,它也会显示新的数字:
int a, *b;
int *c=malloc(sizeof(int));
printf("%p\n%p\n%p",&b,c,c+67108864);
显示:
0x7fffc15b5920
0x211e2a0
0x1211e2a0
我试着找这个问题,但找不到,所以我做了.