【问题标题】:How to get garbage values in python如何在python中获取垃圾值
【发布时间】:2016-04-29 17:18:30
【问题描述】:

这个问题可能没有任何实用价值,只是出于好奇。 在 C/C++ 中,当您声明如下变量时:

int c;

变量c 里面会有一些垃圾值。 据我了解,python 没有 C/C++ 中的变量,但它具有与对象的名称绑定。所以,根据我的说法,没有办法得到垃圾,因为你总是先创建对象,然后给它分配一个标签。

垃圾值实际上就是存储在位置变量引用的任何内容。但是,我想知道是否有某种方法可以在 python 中获取垃圾值。换句话说,是否有某种方法可以访问内存位置而无需先对其进行初始化。在我看来,这应该是不可能的,如果这是设计使然,我将不胜感激。但我只是好奇。

我仍在学习 python 和 C++,不是专家,如果这是一个愚蠢的问题,请原谅我。

【问题讨论】:

  • 您可以使用任何允许您使用基于 C/C++ 的FFI 的语言来执行此操作。 Python 就是其中之一。

标签: python c++ c garbage-collection


【解决方案1】:

这通常取决于您使用的解释器。例如,使用 CPython,您可以在 this answer 中执行类似操作,或者基本上使用 C 库,如 this other answer 建议。

无需初始化即可访问内存位置

可以用这样的方式完成,

from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
# create a dummy object, just to get a memory location
a = 0x7fff
# and use it as a pivoting point to access other locations
offset = 100
print(hexlify(string_at(id(a)+offset, getsizeof(a))))

这种事情不用说是有风险的,但是是一个有趣的实验。

【讨论】:

  • 我不想要一个对象的内存地址。这很简单。我只想获取一些未分配给任何对象的内存。答案中的两个链接都处理初始化后的内存访问。
  • “在没有初始化的情况下访问内存位置”您可以在第二个链接的示例中计算 id(a) 后添加位置。
  • 谢谢,我相信这就是我正在寻找的那种 hack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多