2012年7月16日

摘要: 首先由一个程序引入话题:1//环境:vc6+windowssp22//程序13#include<iostream>45usingnamespacestd;67structst18{9chara;10intb;11shortc;12};1314structst215{16shortc;17chara;18intb;19};2021intmain()22{23cout<<"sizeof(st1)is"<<sizeof(st1)<<endl;24cout<<"sizeof(st2)is"<< 阅读全文
posted @ 2012-07-16 17:13 很多不懂呀。。 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 一、内存对齐的原因大部分的参考资料都是如是说的:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。二、对齐方式每个平台上的编译器都有自己的默认“对齐系数”。同时,我们也可以通过预编译命令#pragma pack(n)...#pragma pack()来改变对齐系数n,取值为1,2,4,8,16。当结构体进行内存分配时,分两步对齐:第一、每个结构体成员 阅读全文
posted @ 2012-07-16 15:53 很多不懂呀。。 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一:#include <iostream> using namespace std; structX {char a; int b;double c;}S1;void main() { cout << sizeof(S1) << endl; cout << sizeof(S1.a) << endl; cout << sizeof(S1.b) << endl; cout << sizeof(S1.c) << end 阅读全文
posted @ 2012-07-16 15:47 很多不懂呀。。 阅读(527) 评论(0) 推荐(0) 编辑

导航