我使用C++,並且我具有以下結構:如何在內存中連續分配可變大小的結構?
struct ArrayOfThese { int a; int b; }; struct DataPoint { int a; int b; int c; };
在內存中,我希望有在每個數據點的端部1個或多個ArrayOfThese元件。每個數據點並不總是有相同數量的ArrayOfThese元素。
因爲我有數量可觀的數據點來組裝,然後通過網絡進行流式傳輸,我希望我所有的DataPoints和它們的ArrayOfThese元素都是連續的。浪費固定數量的ArrayOfThese元素的空間是不可接受的。
在C中,我會在DataPoint的末尾創建一個元素,它被聲明爲ArrayOfThese d[0];
,爲我的多個ArrayOfThese元素分配了一個DataPoint加足夠的額外字節,並使用虛數組來索引它們。 (當然,ArrayOfThese元素的數量必須位於數據點的某個字段中。)
在C++中,是使用放置new和相同的0長度數組hack的正確方法嗎?如果是這樣,那麼放置新的保證是否保證後續對來自同一內存池的新調用將連續分配?
不要這樣做,除非你想了解切片。您可以在STL容器中存儲指向超類的指針,但是如果您開始嘗試將子類存儲在專用於超類的容器中,則最終會丟失任何子類信息。 – Eclipse