有時C++編譯器爲同一個二進制文件中的同一類型T生成不同的內存佈局。即,這種情況發生時發生的對象的類的既作爲非連續子對象,和作爲一個獨立的對象或數組子對象:一個Binary中同一類型的不同佈局
struct A { int i; };
struct B : virtual A { int i; };
struct C : virtual A { int i; };
struct D : B,C { int i; };
...
D d;
B b;
B* p1= &(B&)d;
B* p2= &b;
根據C++ 14標準,可以自由地產生任何編譯器單個二進制文件中T類型對象的不同佈局的數量? 內存佈局是否在編譯時固定?
分拆:How does placement new know which layout to create?
精化對第二個問題: 類型T的對象噸可通過T *或由字符*指針來訪問。 (後者由§3.10(10)證明)編譯好的程序一旦運行,就可以通過char指針訪問t來確定t的子對象的相對偏移量。這些偏移量是確定性的,還是可能從一個程序執行到另一個程序執行?
你能否詳細說明你的問題?你是什麼意思*在編譯時內存佈局是否固定*? –