本文原链接: http://www.cnblogs.com/zouzf/p/4455167.html先看一下这个链接:http://www.cnblogs.com/ren54/archive/2013/01/11/2856207.html我遇到情况和这位朋友很类似:用二进制方式从文件读取内容到内存,...
分类:
移动开发 时间:
2015-04-25 06:51:07
阅读次数:
290
在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间。虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐...
分类:
编程语言 时间:
2015-04-16 23:39:23
阅读次数:
285
一、何谓字节对齐?
现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲,似乎对任何类型变量的访问都可以从任何地址开始,但实际情况是在访问特定变量的时候,经常在特定的内存地址访问,而不是顺序的一个接一个的排放。为了使CPU能够对变量进行快速访问,变量的起始地址应该具有某些特性,即所谓的“字节对齐”。比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整...
分类:
编程语言 时间:
2015-04-14 08:29:40
阅读次数:
209
关键字sizeof的作用是返回对象或类型占用的内存字节数,返回值是size_t。基本数据类型占用的字节数:(32位系统)char 1字节bool 1字节short 2字节int 4字节long 4字节float 4字节double 8字节 对sizeof结果的一个重要影响因素是字节对齐。首先看一个....
分类:
编程语言 时间:
2015-04-09 17:17:34
阅读次数:
166
参加了很多面试,遇到字节对齐的问题不是1次2次,但一直没有彻底弄明白是什么意思,清明节刚好闲下来,彻底研究了一下,得到下面的结论,希望对以后的面试和工作有作用: 第一种结论: 首先提出几个概念 ①...
分类:
编程语言 时间:
2015-04-06 19:03:15
阅读次数:
202
若是在32bit机器上,使用gcc编译器,得到的sizeof(A)和sizeof(B)分别为多少?
class A
{
int a;
short b;
int c;
char d;
};
class B
{
double a;
short b;
int c;
char d;
};
我个人的理解的对齐 ...
分类:
其他好文 时间:
2015-04-06 14:18:26
阅读次数:
155
1.网络编程在自己定义结构体实现协议的时候,一定要注意字节对齐这个问题。否则sizeof和强制转换指针的时候都会出现很难发现的bug。什么是字节对齐自行百度。 1 #pragma pack (1)//字节对齐的控制!非常注意! 2 //定义一个以太网头部 3 typedef struct ehhdr...
分类:
其他好文 时间:
2015-04-05 21:53:50
阅读次数:
167
考虑 char tmp[7] = "abcd"; 做了什么事?1、按道理,堆栈指针需要在栈顶挪出7个字节,但是为了字节对齐,栈顶指针会挪出8个字节,最高地址的一个字节不使用,是cc,注意:栈的使用,地址是减小的。2、tmp就是栈顶指针的别名,是个常量,不能修改指向。3、从栈顶向高地址拷贝a,b,c,...
分类:
编程语言 时间:
2015-04-03 23:51:23
阅读次数:
170
大家应该都知道计算机中间都有字节对齐问题。CPU访问内存的时候,如果从特定的地址开始访问一般可以加快速度,比如在32位机器上,如果一个32位的整数被放在能被32模除等于0的地址上,只需要访问一次,而如果不在,可能要访问两次。但是这样就要求一些数据从特定的地址开始,而不是顺序排放(中间会有一些空余的地...
分类:
其他好文 时间:
2015-03-30 18:20:30
阅读次数:
125
关于内存对齐
一:
1.什么是内存对齐
假设我们同时声明两个变量:
char a;
short b;
用&(取地址符号)观察变量a,
b的地址的话,我们会发现(以16位CPU为例):
如果a的地址是0x0000,那么b的地址将会是0x0002或者是0x0004。
那么就出现这样一个问题:0x0001这个地址没有被使用,那它干什么去了?答案就是它确实没被使用。因为C...
分类:
其他好文 时间:
2015-03-22 00:28:56
阅读次数:
115