c++ - MSVC win32 中的 alignof(double)

标签 c++ visual-studio memory-alignment

以下代码(msvc 2012,32 位):

#include <iostream>

int main()
{
    double d;
    std::cout<<_alignof(double)<<std::endl;
    std::cout<<((size_t)(&d)) % _alignof(double)<<std::endl;
    return 0;
}

有时输出:

8
0

但是,有时它是:

8
4

难道 alignof(double)=8 意味着 double 的对齐将是 8 吗?

我见过: http://msdn.microsoft.com/en-us/library/aa290049(v=vs.71).aspx 但我不确定我是否理解...

最佳答案

那是因为你获取了堆栈上的地址 (&d),该起始地址是在你的程序启动时动态计算的。 _alignof(double) 将始终返回 8,因为对于基本类型,它与它们的大小相同。

关于c++ - MSVC win32 中的 alignof(double),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001135/

相关文章:

c++ - 多线程应用程序中的 SetCurrentDirectory

c++ - 在两个迭代器之间获取 `std::string` 的子字符串

visual-studio - 从 Visual Studio 2005 迁移到 2008 时需要注意什么?

visual-studio - 有没有办法从 Visual Studio 导出快捷方式?

c - 不使用 malloc() 分配 struct dirent

c++11 - 特征对齐问题

c++ - Wide String vs String,它会影响 Windows C++ 中的性能吗

c++ - 使用虚函数 C++ 创建 Die 类

vb.net - 恢复丢失的 VB.net 应用程序的方法

c - 在 C 中模拟可变大小结构;对齐、性能问题