Re: [問題] C++ 是否真有結構體存在?
※ 引述《james732 (好人超)》之銘言:
: 事實上,在C++裡的
: class OO {
: public:
: int member1, member2;
: };
: 與C語言裡的
: struct SS {
: int member1, member2;
: };
: 它們在電腦的記憶體裡的樣子,其實是一模一樣的
: 雖然我們看程式碼,會覺得它們好像是不同的東西
: 但是對電腦來說,這根本就沒有差別
: 所以,如果你認為C語言裡,這個東西叫做結構體:
: struct SS {
: int member1, member2;
: };
: 那其實沒道理說這個東西就不是結構體:
: class OO {
: public:
: int member1, member2;
: };
這裡有個無聊的八卦,之前其實也有講過,但我忘記我回在哪篇 XD
Inside the C++ Object Model 也有講這件事。
那就是...
class ExampleA {
public:
int member1;
int member2;
};
跟
class ExampleB {
public:
int member1;
private:
int member2;
};
實際上只有 ExampleA 可以跟 C 的 struct 相容。
因為編譯器可以把 ExampleB 裡的 private 區段擺在 public 區段之前。
只有保證同一區段內的資料是照你寫的順序擺。
我平常都是統一放 private,所以其實對我沒什麼影響。
PC 和工作站用的編譯器目前應該是還沒有真的會改順序的,
嵌入式系統用的編譯器我就不曉得了。
有些小架構比較怕東怕西,想榨空間和效能,可能會有相關的最佳化被實作。
感覺跟 cache 有關的最佳化也可以在這下手,做下去不知道能不能發 paper XD
是聽說過有些地方的研究著重在 data layout 上...
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.106.161
※ 編輯: tinlans 來自: 118.160.106.161 (11/23 02:06)
→
11/23 02:22, , 1F
11/23 02:22, 1F
→
11/23 02:25, , 2F
11/23 02:25, 2F
→
11/23 02:26, , 3F
11/23 02:26, 3F
推
11/23 02:28, , 4F
11/23 02:28, 4F
推
11/23 06:34, , 5F
11/23 06:34, 5F
推
11/23 13:10, , 6F
11/23 13:10, 6F
→
11/23 13:11, , 7F
11/23 13:11, 7F
→
11/23 13:11, , 8F
11/23 13:11, 8F
推
11/23 13:23, , 9F
11/23 13:23, 9F
→
11/23 13:23, , 10F
11/23 13:23, 10F
推
11/23 13:26, , 11F
11/23 13:26, 11F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章