c语言内存对齐
2013-03-28 21:54
351 查看
记录平常所学,以便回顾。
c语言中存在着内存对齐问题,在struct存储中尤为明显,这里先介绍一种情况,以后接着补充。
结果为:s1占6个字节,s2占12个字节,s3占24个字节。
内存对齐的字节数,以结构体中所占内存数最大的为准,即s1以2个字节对齐,s2以4个字节对齐,s3以8个字节对齐。
s1在内存中的存储为:
a放在0地址,因为是2字节对齐,而b占两个字节,所以放在2、3地址,c虽然占一个字节,但是5地址也是s1的空间。
s2在内存中的存储为:
a放在0地址,b占4个字节,同时s2是4字节对齐的,所以在0-3地址放不下b,将b放在下一个4个字节处,c放在8位置,虽然后面没有数据,但是仍然要占4个字节。
s3也是如此,a在0地址,b在8-15地址存储,c存在16地址,共占24个字节。
c语言中存在着内存对齐问题,在struct存储中尤为明显,这里先介绍一种情况,以后接着补充。
typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long u32; typedef unsigned long long int u64; struct s1 { u8 a; u16 b; u8 c; } struct s2 { u8 a; u32 b; u8 c; } struct s3 { u8 a; u64 b; u8 c; } void main() { printf("%d\n", sizeof(struct s1)); printf("%d\n", sizeof(struct s2)); printf("%d\n", sizeof(struct s3)); }
结果为:s1占6个字节,s2占12个字节,s3占24个字节。
内存对齐的字节数,以结构体中所占内存数最大的为准,即s1以2个字节对齐,s2以4个字节对齐,s3以8个字节对齐。
s1在内存中的存储为:
a放在0地址,因为是2字节对齐,而b占两个字节,所以放在2、3地址,c虽然占一个字节,但是5地址也是s1的空间。
s2在内存中的存储为:
a放在0地址,b占4个字节,同时s2是4字节对齐的,所以在0-3地址放不下b,将b放在下一个4个字节处,c放在8位置,虽然后面没有数据,但是仍然要占4个字节。
s3也是如此,a在0地址,b在8-15地址存储,c存在16地址,共占24个字节。
相关文章推荐
- C语言学籍管理系统源代码
- 学生成绩管理系统C语言代码实现
- C语言商品销售系统源码分享
- C语言指针学习经验总结浅谈
- linux下 C语言对 php 扩展
- C语言WinSock学习笔记第1/2页
- c语言B树深入理解
- C语言使用openSSL库DES模块实现加密功能详解
- C语言编写银行打印程序实例参考
- c语言算术运算符越界问题解决方案
- C语言中史上最愚蠢的Bug
- C语言一个简单的商店管理系统
- Interview street, 王国连通问题
- 2012年5月编程语言排行榜:从爱立信走出来的Erlang
- 我的C语言之恋,纪念C的爸爸
- C语言基础(一)基础篇(1)
- C语言基础函数(一)
- C语言基础函数(二)
- c语言转义符
- 高斯—若当消元法