结构体的优化声明

声明一个结构体的时候,由于考虑到内存的对齐。例如,int型的变量,须要4个字节,那么它在存储的时候就须要在地址可以被4个字节整除的地方开始申请。node

例如咱们申请下面这样的一个结构体:优化

struct{ char a; int b; char c; } node1;

在内存分配的时候,char占一个字节,int 占四个字节。spa

c语言在进行内存分配的时候,须要根据最大的宽度来进行分配。如咱们例子中,int须要4个字节,在分配char型的时候,虽然char只占用一个字节,可是也须要从4个字节的位置开始分配。code

分配的内存以下:blog

 a  -    -     -    b                c    -    -    -   

a分配结束后,要自动填充3个字节,再分配b,而后是c,再自动填充3个字节。内存

因此node1这个结构体的宽度是12get

优化声明

咱们尽可能把对边界要求严格的字段放在前面,要求弱的放在后面(强弱就是相对于宽度对齐来讲):string

struct{ int b; char a; char c; } node1;

 

 b       a  c  -  -

 

这样,先分配int,再分配char,虽然每次申请4个字节,可是最后的长度倒是8,所以节省了33%的地址空间。io

代码验证

 

// test1107.cpp : 定义控制台应用程序的入口点。 //  #include "stdafx.h" #include "stdio.h" #include "string.h" typedef struct{ int b; char a; char c; } node1; typedef struct{ char a; int b; char c; } node2; int main(){ printf("%d\n",sizeof(char)); printf("%d\n",sizeof(int)); node1 n1; node2 n2; printf("%d %d\n",sizeof(n1),sizeof(n2)); getchar(); return 0; }

 

最后输出:table

1

4

8 12

相关文章
相关标签/搜索