C语言学习笔记--------伊能C语言学习笔记------C语言结构体字节对齐机制
2015-12-24 13:52
555 查看
/*
结构体的成员存储时为什么要对齐??? 什么是对齐??? 对齐有什么意义???
结构体对齐的意义是什么???
C语言为什么要引入结构体字节对齐机制???
下面是一些概述:
一般来说,不同的编译器字节对齐机制有所不同,但是有以下3条通用准则:
1.结构体变量的大小能够被其最宽基本类型成员的大小所整除;
2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
3.结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
最宽基本类型是指:像 char 、 short 、int 、 float 这样的内置数据类型。
*/
#include<stdio.h>
#include<stdlib.h>
struct info {
int num;
char ch;
//此时 info结构体的大小为什么是8个字节??? 而不是 4(int)+1(char )=5 个字节 ???
};
struct info {
char c;
char ch[4];
//请问这时结构体的大小为什么是 5个字节???
};
void main()
{
printf("\n%d\n", sizeof(struct info));
system("pause");
}
结构体的成员存储时为什么要对齐??? 什么是对齐??? 对齐有什么意义???
结构体对齐的意义是什么???
C语言为什么要引入结构体字节对齐机制???
下面是一些概述:
一般来说,不同的编译器字节对齐机制有所不同,但是有以下3条通用准则:
1.结构体变量的大小能够被其最宽基本类型成员的大小所整除;
2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
3.结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
最宽基本类型是指:像 char 、 short 、int 、 float 这样的内置数据类型。
*/
#include<stdio.h>
#include<stdlib.h>
struct info {
int num;
char ch;
//此时 info结构体的大小为什么是8个字节??? 而不是 4(int)+1(char )=5 个字节 ???
};
struct info {
char c;
char ch[4];
//请问这时结构体的大小为什么是 5个字节???
};
void main()
{
printf("\n%d\n", sizeof(struct info));
system("pause");
}
相关文章推荐
- 用C语言判断象限
- C语言中通过分隔符来截取字符串
- 【c语言】统计一个数二进制中的1的个数
- 六种流行的语言大餐---C、C++、python、Java、php、C#你更喜欢哪一个呢?
- 高效C++无锁队列实现(转载)
- C语言学习笔记
- 整合 Google 开源 C++ 代码
- c++设计模式之观察者模式
- C++,那些可爱的小陷阱(三)
- 【转】C与CPP后缀的文件在编译时的区别
- C++,那些可爱的小陷阱(二)
- C++,那些可爱的小陷阱(一)
- 学生成绩管理-C语言版之排序(各种排序)
- C语言---基础
- 文件操作与模板编程题 #1(C++程序设计第7周)
- Kruskal算法C语言实现
- Visual C++ 2010 MFC学习笔记一新建程序并显示HELLO WORLD
- xcode7创建C++类生成的头文件为.hpp不是.h
- effective c++学习笔记
- 八种排序算法总结之C++版本