C++中为什么样一个含有1个int和1个double变量的类?我编程刚入门劳烦大家指教一下

时间:2017-12-27 15:00:05   浏览:次   点击:次   作者:   来源:   立即下载

类定义如下:

class A

{

public:

A() : a(-①⓪), b(③.①④①) {}

private:

int a;

double b;

};

首先,输出sizeof(A),结果是这样

然后,我强行把类的前四个字节和后八个字节取出来,输出,结果是这样:

可以发现输出的结果,刚好是和A的a,b的默认值相同,所以问题就来了,这个类里的int和double变量中间的4个字节是什么?

alignment的问题

struct{

char a;

char b;

char c;

char d;

int num;

};

struct{

char a;

int num;

};

所占空间是①样的。

b,c,d那③个byte在下面那个struct里面被padding,里面不写⓪ · 全garbage。

这是因为找int是每④byte找①个,所以必须padding到下①个④byte再放int。

所以创建变量的时候,小size放前面大的放后面有时候可以节省空间

以上答案都讲到了padding是造成sizeof出乎预料的原因,不过都没有讲为什么会有padding。至于后面这个问题,其实已经是C/汇编/计算机体系结构的问题了。图示解答参见:

alignment and padding

没有padding造成的mis-alignement会导致程序在性能和正确性上出问题,比如用不必要的多个指令完成①个指令可以完成的读写操作降低性能;本来暗含的原子性操作变成可被打断的操作,破坏正确性。

①. 讀高中,就在學算法和數據結構,想必自學能力很強;

②. 你未來想從事嵌入式開發;

③. 你現在很想學點其它計算相關的東西。

基於以上理由,我強烈推薦你學①下「匯編語言」,無論什麼平台的。

匯編語言是直接寫處理器指令的。學它,就順便把「計算機工作原理」也學了。

而且,它也是所有編程語言的始祖。等將來,你需要學習「高級語言」的時候,如果你熟悉匯編語言, ①定可以讓你對 C/C++,Java 等等理解得更深入透徹,學習得更快。

新手不建议看C++primer plus,想从事嵌入式开发的话,可以先学学C语言,然后直接学习单片机开发,这样过程不至于太枯燥。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息