当前位置: 首页 > 面试题库 >

32位计算机中用于0x08048000之前的内存是多少?

李洋
2023-03-14
问题内容

在Linux中,我了解到每个进程都在32位计算机中存储从0x08048000开始的数据(在64位计算机中存储从0x00400000开始的数据)。

但是我不知道为什么要从那里开始。 0x08048000之前 用于什么内存?

更新 :有人认为它是为内核映射的。但是据我所知,Linux内核使用从用户堆栈开始的高端内存。


问题答案:

答案确实是:一堆东西。可执行文件的加载地址没有神奇的含义,几乎所有内容都可以映射到较低的地址。常见示例包括:C库(例如C库),动态加载程序ld.so和内核VDSO(内核映射动态代码库,提供了x86
Linux中内核的某些接口)。但是,您可以使用mmap()系统调用将所需的内容映射到任何地方。

例如,在我的特定计算机上,地图如下(已获得,但为“ cat / proc / self / maps”):

gby@watson:~$ cat /proc/self/maps 
001c0000-00317000 r-xp 00000000 08:01 245836     /lib/libc-2.12.1.so
00317000-00318000 ---p 00157000 08:01 245836     /lib/libc-2.12.1.so
00318000-0031a000 r--p 00157000 08:01 245836     /lib/libc-2.12.1.so
0031a000-0031b000 rw-p 00159000 08:01 245836     /lib/libc-2.12.1.so
0031b000-0031e000 rw-p 00000000 00:00 0 
00376000-00377000 r-xp 00000000 00:00 0          [vdso]
00852000-0086e000 r-xp 00000000 08:01 245783     /lib/ld-2.12.1.so
0086e000-0086f000 r--p 0001b000 08:01 245783     /lib/ld-2.12.1.so
0086f000-00870000 rw-p 0001c000 08:01 245783     /lib/ld-2.12.1.so
08048000-08051000 r-xp 00000000 08:01 2244617    /bin/cat
08051000-08052000 r--p 00008000 08:01 2244617    /bin/cat
08052000-08053000 rw-p 00009000 08:01 2244617    /bin/cat
09ab5000-09ad6000 rw-p 00000000 00:00 0          [heap]
b7502000-b7702000 r--p 00000000 08:01 4456455    /usr/lib/locale/locale-archive
b7702000-b7703000 rw-p 00000000 00:00 0 
b771b000-b771c000 r--p 002a1000 08:01 4456455    /usr/lib/locale/locale-archive
b771c000-b771e000 rw-p 00000000 00:00 0 
bfbd9000-bfbfa000 rw-p 00000000 00:00 0          [stack]


 类似资料:
  • 问题内容: 我想知道x86和x64中的64位长吗? 问题答案: 是。Java 在任何JVM上都是64位,无一例外。所有Java原语类型都是完全可移植的,并且在所有实现中都具有固定的大小。

  • 我有个奇怪的MSI!!!

  • 问题内容: 在64位计算机上,Java中的int大小是32位还是64位? 问题答案: 32位。这是Java语言的功能之一,整数的大小不会随基础计算机而变化。请参阅规范的相关部分。

  • 问题内容: 如果我有这样的代码- 如果我在32位计算机上运行此代码,是否保证它是原子的,或者是否有可能不同的线程读取x,可能会得到不完整/垃圾值? 问题答案: 这是简短的摘要: 对于参考,读/写 总是 原子的(即使在64位实现中也是如此!) 对于,,,,,,读/写操作 总是 原子 对于和,如果它们是,则读/写 总是 原子的 因此,只有在读/写可能不是原子的情况下例外: 对于和,如果他们 不 申报,

  • 问题内容: 因此,标题中的问题是,我需要在32位Windows XP的系统上的Tomcat中运行我的服务器应用程序,我正在Eclipse的64位Windows 7上工作和编译。如何将其编译为32位,我需要做什么?我假设在64位计算机上编译它时,它不能在32位Windows上运行? 问题答案: Java不会构建32位或64位应用程序-字节码可在不同的位体系结构之间移植。 唯一的例外是您可能在代码中使

  • 为了使用SharePoint对象模型,我在安装在32位计算机和32位操作系统上的Windows服务中使用SharePoint 64位 dll。 64位dll可能在32位计算机上工作吗? 在什么情况下我们会面临“64位dll在32位机器上无法工作”的问题? 如果我想在64位和32位计算机上安装相同的解决方案,该怎么办?我不想每次都更改目标平台。 更新: 经过研发,我发现“32位解决方案可以安装在64