是否有可移植的方式來檢測(編程)使用C或C++代碼的內存頁面大小?檢測內存頁面大小
檢測內存頁面大小
回答
由於Boost
是一個非常便攜的庫,因此您可以使用mapped_region::get_page_size()
函數來檢索內存頁大小。
至於C++標準,它沒有這種可能性。
C不知道任何關於內存頁。在posix系統上,您可以使用long pagesize = sysconf(_SC_PAGE_SIZE);
它完全取決於平臺,其地址範圍映射到哪些頁面大小。此外,pagesize並非系統範圍。您可以根據用例從不同頁面大小的區域分配內存。而且你甚至可以擁有沒有任何虛擬內存管理的平臺。
因此,處理此主題的代碼必須是特定於平臺的。
斷開您的解釋和結論;應用相同的邏輯會告訴我們,確定指針的大小是特定於平臺的。 – kfsone 2013-12-07 23:14:37
我覺得這個功能有幫助。公共靜態extern無效GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);
問題是'C','C++'和'portable',除此之外,您甚至沒有描述如何從頁面大小獲取。 – kfsone 2013-12-07 23:10:23
是的,這是平臺特定的。在Linux上有sysconf(_SC_PAGESIZE)
,這似乎也是POSIX。典型的C庫使用輔助矢量來實現這一點。如果由於某種原因你沒有一個C庫或輔助載體,你可以決定頁面大小是這樣的:
size_t get_page_size(void)
{
size_t n;
char *p;
int u;
for (n = 1; n; n *= 2) {
p = mmap(0, n * 2, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (p == MAP_FAILED)
return -1;
u = munmap(p + n, n);
munmap(p, n * 2);
if (!u)
return n;
}
return -1;
}
這也是POSIX,我想。它依賴於有一些空閒的內存,但它只需要連續兩頁。它在一些(奇怪的)情況下可能有用。
在整個操作系統中,沒有。
在Linux系統上:
#include <unistd.h>
long sz = sysconf (_SC_PAGESIZE);
- 1. 測量頁面大小
- 2. 檢測頁面縮小
- 3. 檢測SWFLoader內容的大小
- 4. 檢測頁面是否有框架和iframe的大小
- 5. 在CSS或JavaScript中檢測打印機的頁面大小
- 6. 內存大小
- 7. 保持html頁面內svg的大小
- 8. XFS塊大小的大頁面大小
- 9. dashboardSidebar:頁面大小
- 10. HTML頁面大小
- 11. HTML2PDF頁面大小
- 12. FixedDocument頁面大小
- 13. Silverlight 3將內容大小設置爲頁面大小
- 14. 如何根據iFrame大小調整頁面內容大小
- 15. C++從4096字節減少內存頁面大小
- 16. 如何爲控制器設置內存頁面大小
- 17. 虛擬內存中頁面大小的關鍵點
- 18. HTML - 減小頁面大小
- 19. Dreamweaver縮小頁面大小?
- 20. 縮小頁面大小
- 21. css設置相對於頁面內頁面的大小
- 22. 頁面大小和頁面表項大小有什麼區別
- 23. 下載的頁面大小與瀏覽的頁面大小
- 24. 大內存頁面和碎片
- 25. Sqlserver內存大小
- 26. 內存大小UIImageView
- 27. .NET內存大小
- 28. 內存表大小
- 29. 檢測大小變化VB.net
- 30. HTML頁面大小 - 頁面重量
沒有,沒有。 – 2010-07-28 10:27:10
不,因爲沒有虛擬內存的平臺也存在C和C++。 – zvrba 2010-07-28 11:20:06