我刚开始在 C 中处理指针,有一件事情让我很困惑......
下面是简单的代码:
int main ()
{
long ms = 10000000;
int var1;
char var2[10];
printf("Address of var1 variable: %x\n", &var1 );
printf("Address of var2 variable: %x\n", &var2 );
printf("Sizeof of var2 variable: %d\n", sizeof(var2) );
retpid();
millisleep(ms);
return 0;
}
并且 - 它返回 var1 和 var2 内存地址(我相信是虚拟内存?):
$ ./address
Address of var1 variable: 797927b4
Address of var2 variable: 797927a0
Sizeof of var2 variable: 10
PID = 15885
但是 - 当我运行 pmap
- 我在那里看不到这个地址:
$ pmap -x 15885
15885: ./address
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 4 4 0 r-x-- address
0000000000600000 4 4 4 rw--- address
00007fcdb6bbc000 1576 256 0 r-x-- libc-2.12.so
00007fcdb6d46000 2048 0 0 ----- libc-2.12.so
00007fcdb6f46000 16 16 16 r---- libc-2.12.so
00007fcdb6f4a000 4 4 4 rw--- libc-2.12.so
00007fcdb6f4b000 20 12 12 rw--- [ anon ]
00007fcdb6f50000 128 104 0 r-x-- ld-2.12.so
00007fcdb7160000 12 12 12 rw--- [ anon ]
00007fcdb716d000 8 8 8 rw--- [ anon ]
00007fcdb716f000 4 4 4 r---- ld-2.12.so
00007fcdb7170000 4 4 4 rw--- ld-2.12.so
00007fcdb7171000 4 4 4 rw--- [ anon ]
00007fff79780000 84 12 12 rw--- [ stack ]
00007fff797ff000 4 4 0 r-x-- [ anon ]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 3924 448 80
我在这里想念什么?
最佳答案
也许您只是遗漏了一半的指针值。打印指针的正确格式是 %p
,在具有 64 位地址和 32 位地址的机器上 int
这会产生“显着”差异。
关于c - 可变内存位置与符号 vs pmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534699/