内存对齐问题的理解
来源:互联网 发布:4g十网络手机 编辑:程序博客网 时间:2024/05/17 05:13
解决效率问题:1。为什么会出现这种问题 2。解决的途径是什么3。用例子来说话
如果下面的几个例子,你能正确给出答案:请不必再看!!
#pragma pack(1)//用来定义内存对齐所占字节
struct Test
{
double d;
char e;
int c;
char pp;
};
#pragma pack()//这个取消操作
#pragma pack(2)
struct Test
{
double d;
char e;
int c;
char pp;
};
#pragma pack()
#pragma pack(4)
struct Test
{
double d;
char e;
int c;
char pp;
};
#pragma pack()
答案分别为:14,16,24--------
#pragma pack(4)
struct Test
{
char e;
double d;
};
#pragma pack()
struct Test
{
char e;
double d;
};
这两个所占内存大小分别为:12,16------知道为什么吗?如果没有加上#pragma pack(4),那就按最大类型的倍数来算。但是话又说回来,加不加对于一个32位处理器的CPU来说,不都一样吗???不加也应该按照4个字节来算才对呀!!-----这里我还是有点晕,如果你懂的话,讲评价一下
为什么需要内存对齐??
因为CPU看待数据和我们不一样::
以上是人们的角度:
以上是CPU的角度
读数据时如果是从0字节开始读取时,直接读取4个字节即可,只读一次
读数据如果是从1开始:所要做的工作是:此时CPU先访问一次内存,读取0-3个字节的数据进寄存器,并再次读取4-5个字节的数据进寄存器,接着把0字节和5,6,7字节的数据删除,最后全并1,2,3,4,字节的数据进寄存器。
cpu是按块读取的,假如我们想读取2-7这些字节,不能人为的想想像我们直接读吧-2,3,4,5,6,7。但是CPU是另一种思维,它只能按块读取时,虽然要读取234,便是真正在读时会扩充,一下读4个字节。
- 内存对齐问题的理解
- 内存对齐的问题
- 内存对齐的问题
- 内存对齐的问题
- 关于内存对齐的理解
- 关于内存对齐的理解
- 关于内存对齐的理解
- 内存对齐的方法理解
- 简明深入地理解“内存对齐”问题
- 经典的内存对齐问题。
- 经典的内存对齐问题
- 内存对齐的问题1
- 内存分配的对齐问题
- 内存对齐的问题1
- 内存对齐的问题1
- 编译器的内存对齐问题
- 有关内存对齐的问题
- 关于内存对齐的问题
- PictureBOController
- 什么是牛人
- 产品经理要养成“搭讪”的习惯
- Remove Google Analytics Redirect
- mvc3 treeview使用telerik控件js绑定
- 内存对齐问题的理解
- Android中文API合集
- 产品经理要有好的“口才”
- 认真学习java技术
- Failed to create the Java Virtual Machine
- 产品经理必须的“谈判能力”
- 我们从UNIX之父丹尼斯身上学到了什么
- sort命令用法
- oracle常用命令