我想將由各種類型的多個POD結構體組成的狀態變量存儲到單個存儲區中。由於用於組成狀態變量的結構組合是在運行時決定的,因此我不能將它們放在周圍的結構或類中。另外我希望內存分配的數量儘可能低。 做什麼是最好的方法?下面的代碼是合法/可移植的,還是可以在某些平臺/某些編譯器上導致對齊錯誤?在C++中連續存儲區中存儲多個結構體
struct TestA {
int a;
short b;
};
struct TestB {
int c;
float d;
char e;
};
int main() {
void* mem = new uint8_t[sizeof(TestA) + sizeof(TestB)];
TestA* a1 = (TestA*) mem;
a1->a = a1->b = 42;
a1++;
TestB* b = (TestB*) a1;
b->c = 5;
b->d = 23.f;
b->e = 'e';
}
這聽起來有點像我在C做的黑客攻擊。如果你用C++編寫,爲什麼不使用多態?一個基類和多個派生類,和/或一個創建模式在運行時構造這些類將爲可移植性和可維護性帶來很大的幫助。 – rutgersmike
您提出了一個有效的觀點,我已經考慮過這樣的設計。然而,我認爲許多內存分配和間接指向可能會成爲一個性能問題,因爲對於我的特定應用程序,我希望存儲冗餘可組合的聲音合成組件的狀態,顯然必須每秒運行44100次 – Askaga