gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:37 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

关于c - 未使用的内存空间中存储的值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54954653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com