【问题标题】:Hypothetical Memory Usage Monitoring Program假设的内存使用监控程序
【发布时间】:2015-06-03 06:22:14
【问题描述】:

是否有可能(我不关心实用性或实用性)编写一个以以下非常基本的方式监视内存使用的 C 或 C++ 程序?


鉴于声明一个变量而不给它赋值会导致它具有任何已经在其内存位置的值,因此可以创建一个大数组(数千或数百万个元素)并保留所有未赋值的值。然后,要查看这些元素中的任何一个是否已被覆盖,我们只需要反复将它们的当前值与之前的值进行比较即可。


我非常怀疑这会像我上面所说的那么简单。假设我的怀疑是有根据的,那么问题出在哪里,更重要的是,我们可以用一些创造性或深奥的代码来规避它吗?我想这个问题可能是由于声明的、未初始化的元素不允许其他系统进程写入它们的内存地址。请给我一些指点! (嘻嘻)谢谢。

【问题讨论】:

  • 如果你指的是我的最后一句话,那是双关语,“指针”的意思是“提示或建议”:P
  • 你说的是代码检测吗?
  • 永远不要将愚蠢/汉隆剃刀充分解释的恶意归因于恶意
  • @BenSandeen(你应该点击链接;))

标签: c++ c memory monitoring


【解决方案1】:

假设你的程序是 C 创建大型数组受限于允许的可用内存范围以及操作系统对您的限制。

假设您创建了一个非常大的数组(未初始化)。 现在内存已分配给您的进程(您运行的程序),没有其他进程可以访问它! (避免这种事情是操作系统的角色,虚拟化的基本要求)。

因此,由于没有其他进程可以访问它的值,因此一旦分配给您,它的值就不会改变。

【讨论】:

  • 我是否有可能解除分配该内存(或任何用于删除进程所有权的进程的术语)并仍然监视它​​是否随着时间的推移发生任何变化?
  • 没有。将内存还给操作系统后,您将无法访问它。
  • 您可以分配然后记下这些值,然后释放该内存,但问题是当您尝试监控这些值时(现在该区域未分配给您)您会收到一些错误并且您的程序很可能会终止(分段错误),这是因为通过检查那些内存位置的值,您试图访问未分配给您的位置,并且操作系统试图避免未分配给它的进程对内存的任何访问.
猜你喜欢
  • 2016-07-30
  • 2011-03-18
  • 2012-02-05
  • 2010-10-08
  • 2011-06-02
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多