字节对齐

原创 2016年08月30日 22:19:59

若char是1字节,int是4字节,指针类型是4字节,代码如下:

class CTest
{
    public:
        CTest():m_chData(‘\0’),m_nData(0)
        {
        }
        virtual void mem_fun(){}
    private:
        char m_chData;
        int m_nData;
        static char s_chData;
};
char CTest::s_chData=’\0’;

问:
(1)若按4字节对齐sizeof(CTest)的值是多少?
(2)若按1字节对齐sizeof(CTest)的值是多少?

解题思路:

1、先找有没有virtual函数,有的话就要建立虚函数表+4
2、static的成员变量属于类域,不算入对象中+0
3、神马成员都没有的类,或者只有成员函数+1
一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节)


答案:

(1)结果是12= 4(虚表指针)+1(char )+3(对齐补位)+4(int)

(2)结果是9 =4(虚表指针)+1(char )+4(int

版权声明:本文为博主原创文章,未经博主允许不得转载。

什么是字节对齐,为什么要对齐

一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任 何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内...
  • etwdone
  • etwdone
  • 2013年03月22日 09:48
  • 874

为什么需要字节对齐

概念   在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为...
  • qq_25077833
  • qq_25077833
  • 2016年12月04日 16:37
  • 515

C语言字节对齐、结构体对齐最详细的解释

文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。   一、概念       对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2015年03月17日 21:57
  • 9457

struct 字节对齐详解

一.什么是字节对齐,为什么要对齐?     现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的...
  • fivedoumi
  • fivedoumi
  • 2015年11月18日 11:42
  • 925

C++中对字节对齐的理解

前几天时,在公司和同事说到了字节对齐,一直对这个概念比较模糊,只是在《程序员面试宝典》中看到过简单的描述和一些面试题。后来在论坛中有看到有朋友在询问字节对齐的相关问题,自己也答不上来,觉得应该研究一下...
  • weiyuxinyuan
  • weiyuxinyuan
  • 2016年12月11日 14:54
  • 872

Linux下字节对齐准则

一、对齐模数 许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数...
  • chen_chuang_
  • chen_chuang_
  • 2015年03月07日 16:07
  • 1428

pragma pack(非常有用的字节对齐用法说明)

声明: 整理自网络达人们的帖子,部分参照MSDN。 强调一点: #pragma pack(4) typedef struct {     char bu...
  • hellokandy
  • hellokandy
  • 2016年12月23日 09:50
  • 949

字节对齐注意事项

对齐准则      先来看四个重要的基本概念:      1) 数据类型自身的对齐值:char型数据自身对齐值为1字节,short型数据为2字节,int/float型为4字节,double...
  • stephen_yin
  • stephen_yin
  • 2016年02月25日 11:14
  • 941

VC++中关于字节对齐的问题

VC中下面几个结构体大小分别是多少呢 struct MyStruct {     double m4;     char m1;     int  m3; }; struct MyS...
  • cike211
  • cike211
  • 2013年08月13日 15:04
  • 829

任意字节对齐的内存分配和释放

任意自己内存对齐,intel笔试
  • Gen_Ye
  • Gen_Ye
  • 2016年09月28日 23:00
  • 1535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字节对齐
举报原因:
原因补充:

(最多只允许输入30个字)