黑马程序员技术交流社区
标题:
关于结构体
[打印本页]
作者:
墨琰
时间:
2015-8-13 23:05
标题:
关于结构体
结构体指针,结构体数组的使用方式
作者:
新生heima
时间:
2015-8-13 23:16
这个问题有点笼统呀!
作者:
墨琰
时间:
2015-8-13 23:24
新生heima 发表于 2015-8-13 23:16
这个问题有点笼统呀!
那就说说内存对齐吧
作者:
woxingwosu
时间:
2015-8-13 23:33
比如说
shar a;
short b;
int c;
应该是8个字节,先看最大int字节是4,处理到char的时候就给了4个字节,char占一个字节,short占了两个字节,现在是三个字节,空出了一个字节。因为int是四个字节,放不进去,就得重新调用4个字节。所以一共用了8个字节。
不知道是不是问的这个问题。
作者:
庐山烟雨浙江潮
时间:
2015-8-13 23:46
学习了!谢谢分享
作者:
WPeng
时间:
2015-8-13 23:56
内存对齐么,就那么一回事
作者:
新生heima
时间:
2015-8-14 00:18
墨琰 发表于 2015-8-13 23:24
那就说说内存对齐吧
说下我的一个理解吧,仅供参考。
在计算机为结构体分配内存的时候,会选择一个模数(各种使用到的单个变量数据类型中占内存的最大值),这个就是分配内存的基数(内存的大小会是这个模数的整数倍,也就是说,要不就不分配内存,其他的变量挤一挤,要分配就分配一个模数大小的空间)。
确定这个模数之后,按照结构体成员的定义顺序 开始依次分配内存。(这些内容在视频,第12天18,中都有讲到)
对于视频中出现的问题的理解
对于结构体
struct A{
short a;//2
float c;//4
char b;//1
double d;//8
};//占24字节
struct B{
short a;//2
char b;//1
float c;//4
double d;//8
};//占16字节
我认为计算机在确定大的模数的时候,对于小于模数的数据中又会分配一个小的模数,也就是说,在这里大模是8,小模是4,往下是2和1,对于structA ,模数8,所以先分配8字节,8字节内模数是4,开始分配short,2字节没问题,但是当分配float时,就需要分配到后4个字节中了(前4个字节因此浪费2字节),这样8字节占满,再分配char类型时,会再分配8字节,浪费7个,然后再分配8字节放double。也就是说每个数据类型分配时{只会分在以自身为模的地址中},Int和float只会分配的4的倍数的地址中,short只会分配的2的倍数的地址中,char分配在1的倍数的地址中(所有地址都是),double分配在8的倍数地址中。
F:\结构体A.png
对于structB就简单了,它的存储是第一个8字节(2字节short,1字节char,空1字节,4字节float),第二个8字节(8字节的double)
作者:
新生heima
时间:
2015-8-14 00:19
我用qq简单画了个图,不过不知道怎么上传{:2_30:},希望文字你能看懂我说的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2