我知道python是一种高级语言,可以管理内存分配等。它自己的用户/开发人员不必像c,c ++等其他语言那样担心太多。
但是有没有办法可以在python的特定内存地址中写入一些值
我知道id(),如果强制转换为十六进制类型可以给出十六进制的位置,但是我们如何在一个位置写。
首先,正如评论中所指出的,你为什么要做这样的事情是一个很大的问题。你应该仔细考虑是否还有其他选择。
话虽如此,通过扩展来做到这一点非常容易。Python 本身的构建使得可以很容易地通过 C 或 C++ 对其进行扩展。通过Cython做到这一点甚至更容易。
下面概述了如何构建一个采用整数p和 的Python 可调用函数v。它将把值写入v数字地址为 的内存地址p。
注意再次注意,这只是一个技术答案。整个操作及其部分内容都是有问题的,您应该考虑您想要实现的目标。
创建一个文件modify.h,内容为:
void modify(int p, int v);
Run Code Online (Sandbox Code Playgroud)
创建一个文件modify.c,内容为:
#include "modify.h"
void modify(int p, int v)
{
*(int *)(p) = v;
}
Run Code Online (Sandbox Code Playgroud)
创建一个文件modify.pyx,内容为:
cdef extern from "modify.h"
void modify(int p, int v)
def py_modify(p, v):
modify(p, v)
Run Code Online (Sandbox Code Playgroud)
最后,创建setup.py,内容如下:
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"])]
setup(
name = 'modify',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
# ext_modules = cythonize(ext_modules) ? not in 0.14.1
# version=
# description=
# author=
# author_email=
)
Run Code Online (Sandbox Code Playgroud)
我希望您仅将此答案用于学习目的。
| 归档时间: |
|
| 查看次数: |
1862 次 |
| 最近记录: |