2013-07-16 27 views
0

檢查大小總是返回4個字節,我在Qt的假設,由於數據的共享隱:5字節QByteArray的內存佔用空間。 quint64或QByteArray的5個字節更有效的存儲? QByteArray中的

int n = 50; //or n = 100, 200 
QByteArray arr(n,'a'); 
cout << sizeof(arr) << endl; 
::getchar(); 

始終打印4

我如何估計的QByteArray的實際內存佔用?現在的問題是通過有效地存儲大量的5個字節識別符動機 - 它們可以各自如quint64被存儲(使用8個字節的每個,3個字節被浪費因此),或者作爲各自的QByteArray - 但我不知道如何預計開銷在後一種情況下....

我想用這些標識符作爲QMAP關鍵,因此他們應各自在自己的結構 - 一個很長的QByteArray將無法正常工作......

+0

如果你想有效地存儲這5個字節,然後怎麼樣老式結構? – 2013-07-16 13:30:29

+0

@Roku以及如何將它們存儲爲POD - 包含char [5]的結構與比較運算符? –

+0

也許使用結構不是一個好主意,至少使用QByteArray更容易。順便說一下,你有多少個5字節標識符?超過200? – 2013-07-16 14:20:09

回答

1

爲QByteArray(一種使用Qt 4.8)的實際數據可以在qbytearray.h發現,看起來像這樣:

struct Data { 
    QBasicAtomicInt ref; 
    int alloc, size; 
    char *data; 
    char array[1]; 
}; 

所以,如果您的數據適合它quint64將使用更少的存儲空間。

1

sizeof(arr)顯示對象的指針大小。 do arr.squeeze();然後arr.capacity();

但不保持緊縮會帶來最終的代碼,它的作用是清除體內任何prealocated由對象未使用的內存,因此它需要重新分配並memcopies(昂貴的)。

+0

是的,那麼如何估算實際尺寸? –