【C语言】内存对齐实验
环境
x86_64 GNU/Linux
缺省
C++:
//test.cpp #include <iostream> using namespace std; struct st1 { char a ; int b ; short c ; }; struct st2 { short c ; char a ; int b ; }; int main() { cout<<"sizeof(st1) is "<<sizeof(st1)<<endl; cout<<"sizeof(st2) is "<<sizeof(st2)<<endl; return 0 ; }
编译运行:
root@debian:~/test# g++ test.cpp -o testcpp root@debian:~/test# ./testcpp sizeof(st1) is 12 sizeof(st2) is 8
C:
#include <stdio.h> struct st1 { char a ; int b ; short c ; }; struct st2 { short c ; char a ; int b ; }; int main() { printf("sizeof(st1) is %d ",sizeof(struct st1)); printf("sizeof(st2) is %d ",sizeof(struct st2)); return 0 ; }
编译运行:
root@debian:~/test# gcc test.c -o testc root@debian:~/test# ./testc sizeof(st1) is 12 sizeof(st2) is 8
C++与C运行结果一样:成员相同的结构体,sizeof大小不同。
指定1字节对齐
#include <stdio.h> #pragma pack(1) struct st1 { char a ; int b ; short c ; }; struct st2 { short c ; char a ; int b ; }; int main() { printf("sizeof(st1) is %d ",sizeof(struct st1)); printf("sizeof(st2) is %d ",sizeof(struct st2)); return 0 ; }
运行结果:
root@debian:~/test# gcc test.c -o testc root@debian:~/test# ./testc sizeof(st1) is 7 sizeof(st2) is 7
指定2字节对齐
root@debian:~/test# gcc test.c -o testc root@debian:~/test# ./testc sizeof(st1) is 8 sizeof(st2) is 8
参考:
下一篇:
Python写一个修改只狼金币的demo