在PAE系统中,C语言指针的大小是多少?

3

我知道在一个32位计算机中,常规C程序中使用的指针大小为32位。那么在带有PAE的x86系统中呢?


你是在说应用程序代码还是内核代码? - David Heffernan
@DavidHeffernan 应用程序代码 - Norma Barner
从应用程序的角度来看,指针仍然是32位的。所有PAE的细节都在内核方面。 - David Heffernan
即使在内核代码中,PAE也不会让你引用超过32位的任何内容。更宽的寻址只有在启用分页的情况下才会出现,并且只是在页表项中的物理地址,而不是逻辑或线性地址。Linus Torvalds在一个有趣的抱怨中解释了为什么更宽的物理地址而没有更宽的虚拟地址非常糟糕。 - undefined
4个回答

5

仍然是32位。

PAE增加了物理内存地址的大小,使操作系统能够使用超过4GB的RAM来运行应用程序。为运行应用程序,操作系统将较大的物理地址映射到32位虚拟地址。这意味着每个应用程序中的地址空间仍然仅限于4GB。


2
PAE改变了页表的结构,使其能够寻址超过32位物理内存。虚拟内存寻址保持不变-用户空间应用程序中的指针仍然是32位。
请注意,这意味着32位应用程序可以在PAE系统上未经修改地使用,但仍然每个应用程序只能使用4 GB内存。

1

你可以通过窗口(地址范围)访问内存。每次你需要使用窗口外的内容时,你应该使用系统调用来映射另一个范围。考虑使用多个堆,其中包含窗口内的偏移量(指针)-然后完整的指针将是堆标识符和窗口偏移量(结构),总共64位,每次你必须跳出当前堆时,你必须切换它们。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接