有没有理由我的编译器将chars与调试中的4个字节和释放模式中的8个字节对齐?

时间:2017-10-21 04:51:32

标签: c++ char alignment

在调试模式下,每当我创建这样的字符时,它在调试模式下都是4字节对齐,而在发布模式下,它始终是8字节对齐的。无论我是以32位构建模式还是64位运行它,都会发生这种情况。我正在使用Visual Studio 2017.但是我在Ideone.com在线编译器上尝试过它,它总是通过这个测试:

char charbuff[] = "h";
if ((unsigned long long)&charbuff[0] % 8ULL != 0) throw;

我知道字符串文字有一个额外的字节,我试过“hh”,唯一的区别是在32位构建模式下有时会失败(8字节对齐)。

新变量是否从未分配给至少4字节对齐的内存?这是语言或操作系统分配器的功能吗?

编辑:我将它放在主函数的堆栈中:

int main()
{
    char charbuff[] = "hh";
    char charbuff2[] = "hh";
    char charbuff3[] = "hh";

    if ((unsigned long long)&charbuff[0] % 8ULL != 0) throw;
    if ((unsigned long long)&charbuff2[0] % 8ULL != 0) throw;
    if ((unsigned long long)&charbuff3[0] % 8ULL != 0) throw;
}

这总是在发布模式下通过。在调试模式下,它将始终传递4字节对齐。在Ideone.com上,它总是通过这个。

0 个答案:

没有答案