遇到一个很古怪的问题: 例子:
{
... //一些其他代码
int apple = 1; //Addr: a
int* apple_ptr = &apple ; //Addr: 预计=a-8,实际=a-12
int** apple_ptr_ptr = &apple_ptr; //Addr: 预计=a-16,实际=a-24
}
所以地址实际和预期之间的差距一般是什么原因造成的呢?
1
FujiZ 2020-04-05 17:25:15 +08:00 via Android 1
需要考虑 padding
|
2
Mohanson 2020-04-05 17:31:03 +08:00 via Android 1
内存对齐的缘故?把 apple 改成 usize64 应该能得到你想要的结果,猜的
|
3
lance6716 2020-04-05 17:34:57 +08:00 via Android
gdb 看看不就不用猜了吗
|
4
unixeno 2020-04-05 19:18:25 +08:00 via Android 1
这个完全是编译器实现的行为
你用不同的优化等级编译出来的结果可能都不同 |
5
msg7086 2020-04-05 19:32:35 +08:00 via Android 1
为啥能预计?
内存变量分配也不是写在规范里的呀。 对齐,插调试信息,优化,都可能造成变量不相邻。 |
6
tairan2006 2020-04-05 19:33:35 +08:00 1
这里完全无法预期啊
|