gpt4 book ai didi

c++ - 为什么内存地址是偶数?

转载 作者:IT王子 更新时间:2023-10-28 23:35:08 25 4
gpt4 key购买 nike

在 VS 调试器中注意到内存地址通常是偶数后,我尝试了以下程序 (MS Visual Studio 2012)

struct noise {
int data[3];
};

int _tmain(int argc, _TCHAR* argv[])
{
std::vector<noise*> vn;
std::vector<std::complex<double>*> vv;

for (int i(0); i < 90000; ++i) {
std::complex<double> *cur = new std::complex<double>(1, 1);
assert( ! ((int)cur&1) ); // assert if adress is not even
vv.push_back(cur);
if ( ! (i% (rand()%5 + 1)) ) vn.push_back(new noise);
}

for (std::size_t i(0), ie(vv.size()); i < ie; ++i) { delete vv[i]; }
for (std::size_t i(0), ie(vn.size()); i < ie; ++i) { delete vn[i]; }

system("PAUSE");
return 0;
}

它从不断言!怎么会这样?有没有办法让它断言?这有什么副作用吗?

最佳答案

处理器(以及编译器)通常喜欢数据为“aligned”,其粒度高于字节。例如,由于 32 位处理器处理 32 位 block 中的数字,而不是 8 位 block ,因此在 32 位(4 字节)边界上对齐会更有效。事实上,有些处理器甚至需要一定程度的对齐。

对齐还有很多其他原因,例如防止一个单词跨越多个内存页面。编译器通常会在数据结构中插入填充,以便结构的每个成员都对齐到某个倍数(通常是 2 的幂)。大多数编译器还允许您更改对齐设置(使用 #pragma)。

关于c++ - 为什么内存地址是偶数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com