【发布时间】:2015-03-25 12:44:11
【问题描述】:
我想知道 C++ 是如何处理变量的,以便一个又一个声明和初始化的整数变量在内存中的两个地址之间的距离是 3537492 - 3537480 = 12(我假设是位(?))
#include <cstdio>
using namespace std;
int main( int argc, char ** argv )
{
int x = 1;
int y = 2;
printf("int:\t%d\n", sizeof(int));
printf("unsigned int:\t%d\n", sizeof(unsigned int));
printf("Address of x\n\tHex:\t%p\n\tDec:\t%d\n", &x, &x);
printf("Address of y\n\tHex:\t%p\n\tDec:\t%d\n", &y, &y);
return 0;
}
输出:
诠释:4 无符号整数:4 x的地址 十六进制:0035FA54 十二月:3537492 y的地址 十六进制:0035FA48 12月:3537480【问题讨论】:
-
这是 12 个 字节 而不是位。
-
您计算的差异是字节数。 C++ 处理变量的方式完全取决于平台、编译器设置。在某些情况下,变量根本不会保存在内存中。
-
你的问题是什么?
-
使用该选项显示编译器生成的程序集,并查看它是如何布局内存的。
-
您的程序有未定义的行为:
%p需要void *参数,%d需要int参数。
标签: c++ memory reference 64-bit addressof