4 回答
TA贡献1828条经验 获得超3个赞
#include <iostream>int main() { short i, j; std::cout << &i - &j << std::endl; system( "pause" );} |
在Visual Studio界面上,把下图的Debug改成Release(鼠标点一下Debug,然后选择Release)!
改完之后再按Ctrl + F5,看看运行结果!
Visual C++编译器在调试模式下会启用堆栈检查功能,该功能会修改堆栈的内存布局(分配额外的存储),用于检测潜在的越界和堆栈破坏。代码中两个相邻的局部变量分配的内存空间不是挨着一起就是因为这个。
除此之外,C++标准没有规定相邻局部变量的内存必须相邻,所以内存位置还是由实现决定的。
如果代码中没有对局部变量区地址(&),编译器可以将该变量存储在寄存器中已优化其存储速度(64位CPU包含更多的通用寄存器)。这种优化,代码中两个相邻的局部变量存储位置就不能说“差几个字节了”。
TA贡献1744条经验 获得超4个赞
首先:你好好学学编程语言
你所定义不是数组谁说他俩的地址就一定是相隔的然后差两个字节的距离
只有数组在物理地址上才是连续的。
编译器,在进行数据处理的时候最小单位是几个字节,
你的操作系统是多少位的32位,64位,你内存的物理地址是多少位的这都有关系啊。当然你的是32位的,4个字节,定义一个数组然后看看其相隔的距离是不是两个字节。当然肯定是。
TA贡献1789条经验 获得超10个赞
现在的CPU大多是32位的,也就是一次能处理32个二进制位,正好4个字节
程序使用的是虚拟内存,每一个页表项的大小为4字节,
4字节对齐可以使CPU读取内存效率最高。
假如不对齐,在取一个整型数时可能要读两次内存再合到一起。
- 4 回答
- 0 关注
- 180 浏览
添加回答
举报

