malloc()
分配內存塊,該內存塊在進程內存空間內虛擬連續。 malloc()
將大小作爲參數以字節爲單位並返回指向已分配內存空間的指針,但如果要求分配4k對齊的內存,該怎麼辦?如何分配4K對齊的內存
回答
這幾乎肯定可以通過使用諸如posix_memalign之類的東西來實現。
由於4KB的往往是一個頁面的大小(見sysconf(3)與_SC_PAGESIZE
還是老getpagesize(2)系統調用),你可以使用系統調用mmap(2)(用於通過malloc
和posix_memalign
),以獲得4Kaligned內存。
請注意,如果直接使用'mmap()',則可能會發現自己的內存較少。在最簡單的情況下,從'mmap()'分配4個KiB塊給出了最大256Mb的總內存分配量,因爲'mmap()'區域的數量有2^16個限制。 –
我不認爲對於mmap編輯段的數量有2^16的限制。我的[manydl.c](http://starynkevitch.net/Basile/manydl.c)示例能夠創建數十萬個'dlopen'(並且它們每個都使用多個'mmap' -ed段)。 –
你不能在用戶空間分配物理上連續的內存。因爲在用戶空間內核總是從highmem區域分配內存。但是,如果您正在編寫內核模塊或系統空間代碼,則可以使用_get_page()或_get_pages()。
函數posix_memalign()分配大小字節並將分配的內存地址放置在* memptr中。分配內存的地址將是多重對齊,它必須是2的冪和sizeof(void *)的倍數。如果size爲0,那麼放置在* memptr中的值可以是NULL,也可以是稍後可以成功傳遞給free(3)的唯一指針值。 – LtWorf
- 1. 什麼是對齊的內存分配?
- 2. boost :: shared_array和對齊的內存分配
- 3. 讓std :: vector分配對齊的內存
- 4. Java的內存分配對齊
- 5. Win32內存分配與大對齊
- 6. 如何使tr1 :: array分配對齊的內存?
- 7. 分配32字節對齊內存的分配器
- 8. 如何用16字節對齊分配內存?
- 9. 緩存對齊英特爾CPU上的內存分配
- 10. 非齊次數組的內存分配是如何工作的?
- 11. 對象的內存分配
- 12. 在堆上分配的內存塊是否保證了對齊?
- 13. SSE2 - 16字節對齊的內存動態分配
- 14. 如何對齊Objective C中的內存?
- 15. 如何從堆中爲InterlockedIncrement函數分配正確的內存對齊方式?
- 16. 如何使內存對齊類的派生類失去對齊
- 17. NSMutableData如何分配內存?
- 18. javascript如何分配內存?
- 19. 對齊不包括對齊分配
- 20. 堆棧內存分配和對齊問題
- 21. 對象內存分配
- 22. 內存對齊與頁面對齊
- 23. 4k內存中的加密算法
- 24. 虛擬內存和對齊 - 它們如何分解?
- 25. 類的內存對齊
- 26. 預取對齊的內存
- 27. Resharper多行分配對齊
- 28. 如何分配100字節的內存
- 29. 如何釋放Swingworker分配的內存?
- 30. 如何增加nCache的內存分配
你可能是指'對齊'而不是'aliened' –
也許你應該[讀這個問題](http://stackoverflow.com/questions/227897/solve-the-memory-alignment-in-c-interview-question -that-stumped-me/227900#227900)這是一個非常類似的問題,儘管對於一般的(而不是Linux特定的)域。 – Jubatian