繁体   English   中英

存储在未使用的内存空间中的值是什么?

[英]What are the values that are stored in unused memory space?

我使用 mmap() 从 /dev/zero 分配了 4096 长度的内存空间,我发现我仍然可以访问这个空间之外的内存(例如 start_pt 是指向该空间的指针,我可以打印*start_pt+8192 没有任何分段错误)。 并且存储在越界区域中的值似乎是随机的。

有没有人知道这些值是什么以及为什么我可以访问它们?

有时,您的进程中的其他东西从操作系统请求了内存。 如果不检查您的具体过程,通常不可能说出什么。 候选人包括:

  • 当您的程序启动时,加载程序会为您的代码、常量数据、堆栈等设置内存。 此外,为您的程序(可能是命令行 shell)创建新进程的进程可能在内存中保留了一些在执行新程序的过程中保留的内容。 (例如,我不确定命令行参数是直接从父级继承的,还是通过某些进程间通信接收它们的启动代码获得的。)
  • 当您的程序的启动代码正在运行时(由加载程序启动并在调用main之前设置 C 环境的代码),它可能出于各种目的(准备文件缓冲区、为malloc初始化内存池)请求了malloc ,和其他东西),包括它自己的计算。
  • 如果您在mmap之前调用了任何例程,它们可能已经请求了内存。 例如,当您打开文件时可能会创建缓冲区, printf为它需要执行的格式化操作准备一些工作区,而malloc需要额外的内存来保存自己的记录,除了返回给您之外。

从本质上讲,除了您在纯 C 代码中观察到的那些之外,内存中还有各种各样的事情正在发生。

未使用的内存不会映射到进程地址空间。 如果您可以访问内存,则意味着某些内容已使用 mmap(或等效项)映射了内存。如果内存未使用,您将无法访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM