web-dev-qa-db-ja.com

pythonのアクセスメモリアドレス

私の質問は次のとおりです。Pythonでメモリアドレスの内容を読み取るにはどうすればよいですか。例:ptr = id(7)ptrが指すメモリの内容を読み取りたい。ありがとう。

28
Academia

ctypes.string_at をご覧ください。以下に例を示します。これは、Python 3整数。

from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 0x7fff 
print(hexlify(string_at(id(a), getsizeof(a))))

出力

b'02000000d8191e1e01000000ff7f'
36
Mark Tolonen

Pythonでは、Cアプリケーションとインターフェースをとらない限り、一般的にポインターを使用してメモリにアクセスしません。必要な場合は、アクセサー関数の ctypesモジュール をご覧ください。

8

「ptrが指すメモリの内容を読みたい」

Cでコードを記述します。Pythonのコードを使用します。 http://docs.python.org/extending/extending.html

4
S.Lott

idを「逆に」して、id(thing)の結果からPython object thingを取得しようとしていますか?それが実行できるかどうかもわかりません。ガベージコレクションを無効にし、メモリの安全性の欠如につながる可能性がありますプログラムがそれを行う場合、ガベージコレクターが参照であると認識していないもの(id番号)への参照を効果的に持っていることを意味します。まだ使用しているオブジェクトを解放する可能性があります(プログラムの残りの部分で何が起こるかによって異なります)。

C拡張機能などから返されたポインターから未加工のメモリを読み取ろうとしている場合は、他の回答が役立つ場合があります。

1
Ben