90得票7回答
一个32位进程在64位操作系统上可以访问多少内存?

在Windows操作系统下,普通情况下32位进程只能访问2GB的内存(通过boot.ini文件中的特殊开关可以实现3GB)。在64位操作系统上运行32位进程时,可用内存有多少?是否有任何特殊开关或设置可以更改这个情况?

48得票2回答
理解虚拟地址、虚拟内存和分页

我学习了这些主题并阅读了许多文章和书籍,但它们都缺少一些补充信息,使我更加困惑。因此,在这里,我想解释一下我所知道的内容,并提出我的问题。希望这个主题对像我一样的许多人有用。如果需要,我也想学习我的知识是否正确以及进行纠正。 虚拟内存 有些文章说,“虚拟内存是硬盘上模拟物理内存的一些空间,...

47得票5回答
42得票3回答
使用/LARGEADDRESSAWARE对32位Windows可执行文件的缺点是什么?

我们需要将其中一个可执行文件链接到此标志,因为它使用了大量的内存。 但是为什么只给一个EXE文件特殊处理呢?为什么不将其标准化为/LARGEADDRESSAWARE? 所以问题是:即使您不需要它,使用/LARGEADDRESSAWARE是否有任何问题。为什么不将其作为所有EXE文件的标准使用?

41得票13回答
为什么32位操作系统支持4GB内存?

我正在阅读一份有关操作系统的普渡大学的讲义,其中写道: 程序将内存视为一个从地址0到2^32-1(即0到4GB-1)的字节数组 为什么是4 GB呢?

36得票1回答
x86/x86_64处理器在L1、L2和L3缓存中使用物理或虚拟寻址?

在x86/x86_64处理器中,L1、L2和L3(LLC)缓存使用的是虚拟地址还是物理地址(使用PT/PTE和TLB),而且PAT(page attribute table)会对它产生影响吗? 在这种情况下,驱动程序(内核空间)和应用程序(用户空间)之间有区别吗? 简短回答-Intel...

26得票2回答
为什么 ELF 执行入口点的虚拟地址形式是 0x80xxxxx 而不是零 0x0?

执行程序时,程序将从虚拟地址0x80482c0开始运行。此地址不指向我们的main()过程,而是链接器创建的名为_start的过程。 目前我的谷歌研究只导致了一些(模糊的)历史推测,比如这个: “有一种传说是0x08048000曾经是STACK_TOP(也就是说,栈从接近0x0804800...

24得票2回答
禁用并重新启用地址空间布局随机化,仅针对我自己。

我想在我的系统上(Ubuntu Gnu/Linux 2.6.32-41-server)禁用地址空间布局随机化(ASLR),但是,如果我使用sysctl -w kernel.randomize_va_space=0 我猜这个更改会影响系统上的所有用户。这是真的吗?我如何将关闭ASLR的影响限制在...

23得票1回答
GDB检查内存权限

我有一个内存地址,想要查找该内存地址的权限(读/写/执行)。 例如:char *s = "hello"; 这里,字符串常量“hello”存储在只读内存中。在通过gdb运行程序时,有没有可能查看该内存地址的权限(是否仅允许读取等)?

21得票6回答
如何将虚拟内存地址转换成物理内存地址?

在我的C++程序(在Windows上),我正在分配一块内存,并确保它在物理内存中保持锁定(未被交换且连续)(即使用VirtualAllocEx(),MapUserPhysicalPages()等)。 在我的进程上下文中,我可以获得该块的虚拟内存地址, 但我需要找出其物理内存地址,以便将其传递...