#include <iostream>
struct TestStruct1 //对齐到4字节
{
char c1;
short s;
char c2;
int i;
};
struct TestStruct2
{
char c1;
char c2;
short s;
int i;
};
struct TestStruct4
{
char a;
long b;
};
struct TestStruct5
{
char c;
TestStruct4 d;
long long e;
};
int main()
{
TestStruct1 a;
printf("c1 %p, s %p, c2 %p, i %p\n",
(unsigned int)(void*)&a.c1 - (unsigned int)(void*)&a,
(unsigned int)(void*)&a.s - (unsigned int)(void*)&a,
(unsigned int)(void*)&a.c2 - (unsigned int)(void*)&a,
(unsigned int)(void*)&a.i - (unsigned int)(void*)&a);
std::cout << sizeof(a);
//c1 0000000000000000, s 0000000000000002, c2 0000000000000004, i 0000000000000008
//12
TestStruct2 b;
printf("c1 %p, c2 %p, s %p, i %p\n",
(unsigned int)(void*)&b.c1 - (unsigned int)(void*)&b,
(unsigned int)(void*)&b.c2 - (unsigned int)(void*)&b,
(unsigned int)(void*)&b.s - (unsigned int)(void*)&b,
(unsigned int)(void*)&b.i - (unsigned int)(void*)&b);
std::cout << sizeof(b) << std::endl;
//c1 0000000000000000, c2 0000000000000001, s 0000000000000002, i 0000000000000004
//8
std::cout << sizeof(TestStruct4) << std::endl;//8
std::cout << sizeof(TestStruct5) << std::endl;//8字节对齐:24,4字节对齐:20
system("pause");
}
c语言内存对齐的一些操作
最新推荐文章于 2021-08-08 23:31:50 发布