2016-08-01 14 views
1

私はpythonが高いレベルの言語であり、独自のユーザ/開発者のメモリ割り当てなどを管理していることは、c、C++などの他の言語とはまったく心配する必要がないことを知っています。Pythonのメモリ内の特定のアドレスに書き込む

しかし、六角タイプがキャスト場合は進場所を与えることができますが、どのように我々は場所に書くことができ、我々はpythonの

に特定のメモリアドレスに何らかの値を書き込むことができますを通じて方法私は(IDを知っている)があります。

+0

メモリに絶対的にアクセスする一部のシステムで作業している場合を除き、Cであってもハードコードメモリの場所に書き込むことはできません。 http://stackoverflow.com/questions/11207783/read-and-write-to-a-memory-location – niyasc

+0

重複はしませんが、ここでの議論を参照してください:http://stackoverflow.com/questions/8250625/access- memory-address-in-python – cdarke

答えて

2

コメントに記載されているように、なぜあなたはそのようなことをやりたいのですか?何か別の方法があるかどうかを慎重に検討する必要があります。

これは、拡張機能を使用して行うことは非常に簡単です。 Python自体は、extend it via C or C++に簡単に構築されています。それはCythonによってそれをすることはさらに簡単です。

以下は、整数pvをとるPython呼び出し可能関数を作成する方法を示します。数値アドレスがpのメモリアドレスに値vを書き込みます。

再度、これは技術的な回答です。オペレーション全体とその一部は疑問があり、達成しようとしていることを検討する必要があります。

コンテンツで、ファイルmodify.hを作成します。

void modify(int p, int v); 

はファイルmodify.cを作成し、コンテンツに:

#include "modify.h" 

void modify(int p, int v) 
{ 
    *(int *)(p) = v; 
} 

はファイルmodify.pyxを作成し、コンテンツに:

cdef extern from "modify.h" 
    void modify(int p, int v) 

def py_modify(p, v): 
    modify(p, v) 

最後に、setup.pyを作成し、th E含量:

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

ext_modules = [Extension(
    name="modify", 
    sources=["modify.pyx", "modify.c"])] 

セットアップ( NAME = '変更'、 cmdclass = { 'にbuild_ext':にbuild_ext}、 ext_modules = ext_modules、 #ext_modules = cythonize(ext_modules)?ない0.14.1 #バージョンで= #説明= #作者= #AUTHOR_EMAIL = )


私はあなたが唯一の目的を学ぶためにこの回答を使用したいと考えています。

1

Python自体には、プログラマがメモリに直接アクセスできるようにするための機能は含まれていません。これは、あなたの質問に対する答えが悲しいこと(または幸いなことに、あなたの見通しによる)が「いいえ」であることを意味します。

+0

AFAIK、 "Python自体"は、GPUの操作、またはソケットメッセージングを許可しません。拡張機能やライブラリを使用するだけです。答えは厳密に正しいかもしれませんが、実際にはPythonが使用されている他のいくつかの質問にその論理的根拠を適用することができます。 –

関連する問題