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

发表时间:2017-12-27 15:00:05 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《梅雨季节普洱茶很容易发霉咋办?加入网约车司机行列有哪些好处呢》相关知识。本篇中小编将再为您讲解标题C++中为什么样一个含有1个int和1个double变量的类?我编程刚入门劳烦大家指教一下。

类定义如下:

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语言,然后直接学习单片机开发,这样过程不至于太枯燥。

编后语:关于《C++中为什么样一个含有1个int和1个double变量的类?我编程刚入门劳烦大家指教一下》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《使用指向指针的指针方便在何处?既然在变量前加一个&就可以得到地址》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题