我們如何使用連續的內存塊來使其中的一部分與其餘部分相連?例如,如果我使用malloc分配一個連續的字節塊,現在我想以這樣一種方式來構造它,即塊的初始部分將被構造爲指向剩餘部分的指針。這意味着指針和指向對象應該是連續的......?內存分配和結構
Q
內存分配和結構
0
A
回答
0
這個問題對我來說沒有多大意義。假設您想要大小爲sizeBytes的nItem(意味着它們的大小都相同),您不需要存儲指針,因爲您可以在需要時計算分配內存的偏移量。所以你可能在你的問題中缺少一些標準。這裏是你如何做到這一點:
void *block = malloc(nItems * sizeBytes);
然後伸入n-th
對象,你會簡單地做:
void *myMemory = block + n * sizeBytes;
你會想可能做一些邊界檢查有..
但是這太容易了,所以我猜你確實有不同大小的結構,你想在一個malloc中分配並訪問。因此,這不僅僅是一個確定「子塊內存」地址的問題,而是你想知道如何進行投射,以便稍後能夠理解該對象(假設它是一個C結構) 。所以我想我必須說我總體上對這個問題感到困惑。
您可能需要/需要像指針,大小和內存中每個「子塊」應該是的結構類型之類的東西。這會顯示你的標題信息應該是什麼樣子。粗略地說,你需要計算'元數據'和'有效載荷數據'所需的存儲空間,然後將這些東西放在一起。
但實現起來並不是一件容易的事,因爲你必須弄清楚如何告訴你的函數如何分配/初始化內存塊什麼是對象混合(以及每個子對象的佈局順序-目的)。
恐怕這個問題是嚴重低估的。
0
如果你想要一個類型的對象的二維數組,你可以做這樣的:
int entries = xSize * ySize; // create a 2D array of xSize by ySize dimensions
size_t buffSize = entries * objectSize; // objectSize is number of bytes for your object
void *block = malloc(buffSize);
我們訪問您的二維數組中的任何條目:
void *thingie = block + y * xSize + x;
現在的thingie點阻止它對應於x,y。如果你想,你也可以改變你的內存對象的佈局。上面我做了專業。你可以這樣做:
void *thing = block + x * ySize + y;
這將是專欄。以上可以擴展到n維:
int entries = xSize * ySize * zSize; // create a 3D array of xSize, ySize, zSize dimensions
size_t buffSize = entries * objectSize; // objectSize is number of bytes for your object
void *block = malloc(buffSize);
然後:
void *thingie = block + z * ySize * xSize + y * xSize + x;
到你的3D立方體紀錄。你可以把它放到你想要的任何維度上,當然,如果你在大尺寸空間中處理大型物體,你會比以後更早炸燬你的記憶。
相關問題
- 1. C結構,內存分配和結構
- 2. 內存分配結構
- 3. 結構的內存分配
- 4. 爲結構分配內存
- 5. 分配內存和填充結構
- 6. 結構和內存分配與循環
- 7. 在C++中用void *分配內存結構內存分配
- 8. 分配內存內部結構
- 9. 結構內存分配的方式
- 10. 分配內存以包含結構
- 11. C++內存分配器體系結構
- 12. 爲結構數組分配內存
- 13. 嵌套結構內存分配
- 14. 爲結構動態分配內存
- 15. 結構元素的內存分配
- 16. C++中的結構內存分配
- 17. 分配內存並生成結構C
- 18. 內存分配到++結構用C
- 19. 動態分配內存結構c
- 20. 分配內存的指針結構
- 21. 帶結構的動態內存分配
- 22. 結構的C++內存分配
- 23. 嵌套結構分配內存
- 24. C結構表動態內存分配
- 25. 結構的內存分配(低性能)
- 26. 變量的塊結構內存分配
- 27. 結構中的內存分配
- 28. 結構上的內存分配和複製構造函數
- 29. 分配和結構
- 30. 指針,數組和結構(並分配內存)?
好的,是的,我的問題是嚴重低於指定。這裏是另一個比喻...如果我使用malloc()分配一個典型的二維數組,我在某些塊中獲得非連續塊有指向其他數據的指針有數據...我想分配所有這些數據他們我的意思是指針和數據)連續在內存..如何做到這一點? – CoolToshi45 2013-02-14 07:01:44
如果你想要一種類型的對象的二維數組,你可以這樣做: – 2013-02-14 07:34:11