c/c++语言开发共享检测内存页面大小

是否有一种可移植的方法来使用C或C ++代码(以编程方式)检测内存页面大小?

    由于Boost是一个非常可移植的库,您可以使用mapped_region::get_page_size()函数来检索内存页面大小。

    至于C ++标准,它没有提供这种可能性。

    C对内存页面一无所知。 在posix系统上,你可以使用long pagesize = sysconf(_SC_PAGE_SIZE);

    是的,这是特定于平台的。 在Linux上有sysconf(_SC_PAGESIZE) ,它似乎也是POSIX。 典型的C库使用辅助向量实现此function。 如果由于某种原因你没有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。 它依赖于有一些空闲内存,但它只需要两个连续的页面。 它可能在某些(奇怪的)情况下有用。

    它完全取决于平台,地址范围映射到哪些页面大小。 此外,页面大小不是系统范围的。 您可以根据用例从不同的页面大小区域分配内存。 而且你甚至可以拥有没有任何虚拟内存管理的平台。

    因此,处理此主题的代码必须是特定于平台的。

    Windows 10,Visual Studio 2017,C ++。 获取页面大小(以字节为单位)

     int main() { SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); printf("%s %dnn", "PageSize[Bytes] :", sysInfo.dwPageSize); getchar(); return 0; } 

    在整个操作系统中,没有。

    在Linux系统上:

     #include  long sz = sysconf (_SC_PAGESIZE); 

    我认为这个function有帮助。
    [DllImport(“kernel32.dll”)] public static extern void GetSystemInfo([MarshalAs(UnmanagedType.Struct)] ref SYSTEM_INFO lpSystemInfo);

      以上就是c/c++开发分享检测内存页面大小相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560019.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐