在visual c++里定义一个短整型的i和j的变量,为什么间隔是4个字节而不是两个字节?

但是看到物理地址&i和&j分别是0x0019ff34和0x0019ff30,我想问下为啥间隔是4个字节而不是两个字节,short类型的存储空间不是两个字节吗?

神不在的星期二
浏览 181回答 4
4回答

子衿沉夜

#include&nbsp;<iostream>int&nbsp;main()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;i,&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;<<&nbsp;&i&nbsp;-&nbsp;&j&nbsp;<<&nbsp;std::endl;&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;"pause"&nbsp;);}在Visual Studio界面上,把下图的Debug改成Release(鼠标点一下Debug,然后选择Release)!改完之后再按Ctrl + F5,看看运行结果!Visual C++编译器在调试模式下会启用堆栈检查功能,该功能会修改堆栈的内存布局(分配额外的存储),用于检测潜在的越界和堆栈破坏。代码中两个相邻的局部变量分配的内存空间不是挨着一起就是因为这个。除此之外,C++标准没有规定相邻局部变量的内存必须相邻,所以内存位置还是由实现决定的。如果代码中没有对局部变量区地址(&),编译器可以将该变量存储在寄存器中已优化其存储速度(64位CPU包含更多的通用寄存器)。这种优化,代码中两个相邻的局部变量存储位置就不能说“差几个字节了”。

慕无忌1623718

首先:你好好学学编程语言你所定义不是数组谁说他俩的地址就一定是相隔的然后差两个字节的距离只有数组在物理地址上才是连续的。编译器,在进行数据处理的时候最小单位是几个字节,你的操作系统是多少位的32位,64位,你内存的物理地址是多少位的这都有关系啊。当然你的是32位的,4个字节,定义一个数组然后看看其相隔的距离是不是两个字节。当然肯定是。

至尊宝的传说

现在的CPU大多是32位的,也就是一次能处理32个二进制位,正好4个字节程序使用的是虚拟内存,每一个页表项的大小为4字节,4字节对齐可以使CPU读取内存效率最高。假如不对齐,在取一个整型数时可能要读两次内存再合到一起。

慕侠2389804

因为两个变量的地址可能不是连续分配的你如果用数组或者结构体的话,就能看出地址间隔是2了
打开App,查看更多内容
随时随地看视频慕课网APP