如果使用64位UNIX操作系統,將數組大小定義爲8的倍數是否有優勢?我打算使用這個數組來從共享內存中加載數據。因此操作系統和頁面大小上可能存在依賴關係。數組大小優化
數組大小優化
回答
沒關係。你的編譯器知道它是否需要填充,所以讓它決定。不要因爲猜測而弄髒代碼。
讓你的程序工作第一個,然後關心性能與分析器。
我的程序工作正常,我使用這個數組從共享內存中加載數據。所以問題是關於性能和內存使用情況? – 2010-10-22 13:35:18
@Sachin:你確定這是你程序中的瓶頸嗎?你在數組中做什麼是你想要提出的問題。你能添加更多的上下文嗎? – GManNickG 2010-10-22 13:36:40
我已更新問題,請現在檢查 – 2010-10-22 13:40:47
假設你在堆上動態分配數組,假設malloc的內部分配算法將實際上對內核的內存請求抽象化,這是公平的。也就是說,malloc()調用和libc的brk()(或mmap())系統調用之間可能存在或可能不存在直接關係。
malloc手冊頁有更多關於此的內容。
因此,就內存使用情況而言,我傾向於建議由於malloc可能會在你下面做一些不同的事情(並且是合理的),所以你是否分配8個字節的倍數並不重要。
就程序性能而言,數據結構在內存中的分配可能會對緩存性能產生巨大影響。但是,最終,您需要對應用程序進行配置,以查看是否可以提高其緩存性能。我不相信有一條強硬的規則可以讓你在編寫代碼的時候優化它。
如果你有興趣瞭解更多關於記憶和Linux,烏利齊·德雷珀關於這個問題在幾年前寫了一個夢幻般的系列LWN:
如果你是有關內存訪問對齊或所以 - 這是內部環境/ libc事宜如何調整動態分配。如果其大小對齊,則不保證以特定方式對齊某個數組。許多分配器返回對齊到某個值的內存塊(大約是機器字的2倍或4倍大小),所以它不是調整對齊的地方。
我只記得幾件事情,可能有重要意義:
您可能希望使用矢量操作和/或展開的循環處理數組,所以它可能需要有一定的留白,使程序不超出分配區域。 (但是,如果你的向量引擎需要超出標準C實現提供的對齊方式,你必須以另一種方式分配內存,而不僅僅是簡單的malloc())。
大多數內存分配器在分配區域旁邊存儲服務信息(例如分配的塊大小),並且從空閒中切割的總內存大小稍大。最好是分配比某個值小一些的區域,以便在某個標準分配塊(比如內存頁面)中有密集的區域。例如,如果CPU有4k頁,那麼頁面可能只包含3個1024字節塊,但是4個1008字節(= 1024-8)塊。另外,許多內存分配器都有一個塊大小閾值,低於這樣的內存是從堆中分配的,但是在它之上,內存是通過整個硬件頁直接從OS VM調度器獲得的,因此在頁邊界上對齊。在這種情況下,可能需要將分配大小舍入到頁面大小以獲得整個頁面。
有可能是soume其他問題,但我不記得他們。
很好的答案。兩個問題。 L2高速緩存中的塊與RAM塊的大小相同嗎? L2緩存是否緩存單個塊還是具有更精細的粒度? 「 」作爲一個例子,如果CPU有4k頁面,那麼頁面可能只包含3個1024字節塊,但是4個1008字節(= 1024-8)塊。「這如何確定? – HaltingState 2011-12-25 14:26:48
具體值取決於MPU開發人員,可能因模型而異,因此a不能全部回答您。您必須查看MPU數據表以獲得答案。無論如何,作爲一種良好的做法,您不應該依賴特定的值或分配器行爲(至少在您的代碼檢查爲真)之前。緩存頁面可能因型號不同而不同,作爲VMM頁面的'硬件頁面'甚至可以通過OS切換,因此根據上下文有很多答案。 – Vovanium 2011-12-26 19:35:29
- 1. 優化線程池大小
- 2. 大小優化選項
- 3. 優化ABCpdf文件大小
- 4. Matlab:優化縮小矢量大小
- 5. 優化CSS文件大小過大
- 6. 優化Python:大數組,內存問題
- 7. 按小時查詢優化小組
- 8. PHP數組 - 優化
- 9. 優化excel數組
- 10. 優化表以減少索引大小
- 11. 優化AS3 SWF文件的大小?
- 12. 如何優化PDF文件大小?
- 13. android優化的按鈕大小
- 14. 優化控件大小調整
- 15. 針對代碼大小優化的Newlib
- 16. 在Parse.com中優化圖片大小
- 17. bulkinsert插入大小的優化
- 18. AS3:優化對象內存大小
- 19. 優化QT的二進制大小?
- 20. 優化Azure虛擬機大小
- 21. Mysql的最小/最大優化
- 22. 優化div +屏幕大小JS塊
- 23. 初始化未知大小的數組
- 24. 優化PHP代碼(試圖確定最小/最大/大小寫)
- 25. 用於優化/最小化swf文件大小的工具
- 26. 大數據庫優化
- 27. 數組大小
- 28. 數組大小
- 29. mysql巨大的表查詢優化組
- 30. 組織和優化大型表格
你的意思是數組大小? – 2010-10-22 13:30:52
是的,我的意思是數組大小 – 2010-10-22 13:31:42
爲什麼8?大聲笑這將是更好的定義數組大小的倍數'PAGE_SIZE/sizeof(ARRAY_ELEMENT)'...'4096/8' =='512'(開玩笑) – pmg 2010-10-22 13:32:56