是有可能找出用C程序和malloc的一个处理器的页面大小? 而不是通过使用sysconf()调用?

有帮助吗?

解决方案

如果你能#包括一些Linux内核头,你可以找到在宏PAGE_SIZE

<asm/page.h>

在cygwin的(也许窗口DDK)1是在

<w32api/ddk/winddk.h>

有“肮脏把戏”(非常非常脏!)在运行时的度的计算页面大小。所有不可移植的,完全取决于系统。

让我们有一些有趣!

5月系统一种可能的关键是要创建一个共享内存对象仅1个字节长。系统调用通常会将容量高达系统页面大小。漂白!

另外一个,如果你是在类Unix系统上运行,你敢拦了SIGSEGV信号,你可以尝试寻找有效的领域探索的记忆,看看他们四舍五入其中2权力。嗯...

那么,为什么sysctl的是对你不好?

此致

其他提示

标准C没有了“页面尺寸”的概念,所以,根据你的标签,没有。可能有具体实现的方法 - 你有一个特别反感使用sysconf?我假设你提到它,因为它是一种方式来真正得到你所需要的信息,在这种情况下,为什么不使用它?

的malloc是不可能告诉你,你想知道什么。虽然它往往具有最小的尺寸和用途的将分配对准的考虑,他们不一定相同(或以任何定义的方式有关)的页面大小。 你是否愿意到别处?你用的是什么环境?

(它不是一个真正的答案,但我无法将它添加在评论部分,所以在这里回答:它只是从我调查的一些结果)

(正如我刚才在我原来的问题说,我的兴趣是纯学术性的,我只是需要一些方法来计算页面大小,并确认所有的人都同意相同的值)

要找出系统的页面大小/微处理器,而不使用sysconf是只是为了好玩!这是我试过到目前为止:

-get使用sysconf(_SC_PAGE_SIZE)的实际页大小:i。在这个计算机0x1000的是4K得到(其英特尔处理器386在它加载32位Linux我的下一个步骤将是验证与其他几个此值方式(如果我能找到那些可靠)。

- 然后我分配1个字节的存储器

-in一个循环,使用偏移计数器,我写超出1个字节分配的内存。它工作得很好,直到0x19a8这超出1页大小,仅低于2页大小!

-SEGV 1/1页之间的某处发生第2页的大小,朝向端部。这是可重复的。

-SO该方法能不能可靠地找到的页大小。

这就是为什么我问这个问题。 有没有窍门,找出页面大小(不是使用内核提供直接的信息等)?我甚至准备在妥协的malloc(意味着使用一些其他特技)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top