是否有可移植的方式来检测(编程)使用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. 保持html页面内svg的大小
- 4. XFS块大小的大页面大小
- 5. dashboardSidebar:页面大小
- 6. FixedDocument页面大小
- 7. Silverlight 3将内容大小设置为页面大小
- 8. C++从4096字节减少内存页面大小
- 9. 虚拟内存中页面大小的关键点
- 10. 如何为控制器设置内存页面大小
- 11. HTML - 减小页面大小
- 12. Dreamweaver缩小页面大小?
- 13. 缩小页面大小
- 14. css设置相对于页面内页面的大小
- 15. 下载的页面大小与浏览的页面大小
- 16. 页面大小和页面表项大小有什么区别
- 17. .NET内存大小
- 18. 内存表大小
- 19. Sqlserver内存大小
- 20. 内存大小UIImageView
- 21. HTML页面大小 - 页面重量
- 22. 内存泄漏没有检测到CRT内存泄漏检测
- 23. 确定页面表大小
- 24. Github页面大小限制?
- 25. Winforms RichTextBox页面大小?
- 26. EventHistoryCollector - 增加页面大小
- 27. 页面大小:Firefox附加
- 28. 设置页面大小
- 29. ASP页面大小限制
- 30. 设置UIscrollView页面大小
没有,没有。 – 2010-07-28 10:27:10
不,因为没有虚拟内存的平台也存在C和C++。 – zvrba 2010-07-28 11:20:06