gpt4 book ai didi

c++ - 使用 __declspec 的内存填充问题

转载 作者:行者123 更新时间:2023-11-30 05:21:46 26 4
gpt4 key购买 nike

基于 MSDN,__declspec(align(x)) 应该在成员变量之后添加 x 位填充,例如:

#include <iostream>
using namespace std;
void main()
{
struct test
{
__declspec(align(32))char x;
__declspec(align(32))int i;
__declspec(align(32)) char j;
};
cout << sizeof(test) << endl;//will print 96 which is correct
}

现在考虑以下情况:

#include <iostream>
using namespace std;
void main()
{
struct test
{
char x;
int i;
char j;
};
cout << sizeof(test) << endl;//will print 12
//1 byte for x + 3 bytes padding + 4 bytes for i + 1 byte for j +3 bytes padding =12
}

但是如果我把代码改成这样:

#include <iostream>
using namespace std;
void main()
{
struct test
{
char x;
int i;
__declspec(align(1)) char j;
};
cout << sizeof(test) << endl;//will print 12 again!!!!

}

为什么它给我 12 而不是 9!我告诉编译器我不希望在 j 之后有任何填充。

最佳答案

__declspec(align(1)) char j 不做任何事情 - char 不需要特殊对齐,有或没有 __declspec .

假设您稍后声明了一个 test 数组:test arr[2];。这里,arr[0].iarr[1].i 都必须在 4 字节边界上对齐;这要求 sizeof(arr[0]) 是 4 的倍数。这就是结构末尾有填充的原因。

关于c++ - 使用 __declspec 的内存填充问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960520/

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