gpt4 book ai didi

内存使用异常的 C Python 模块

转载 作者:太空狗 更新时间:2023-10-29 17:26:24 24 4
gpt4 key购买 nike

我对 Python C-API 和模块创建还很陌生。我试图创建一个 c-hash python 模块。我在 Windows 上使用 python 3.4.3 和 TDM-gcc (64bit) 4.9.2 进行编译。

这是我的代码:

// hash_mod.c
#include <Python.h>

unsigned long _hash(unsigned char const* str)
{
unsigned long hash = 5381;
int c;
int i;

i = 0;
while (str[i] != '\0')
{
c = str[i];
hash = ((hash << 5) + hash) + c;
++i;
}

return hash;
}

static PyObject*
hash_hash(PyObject* self, PyObject* args)
{
unsigned char const* str;

if (!PyArg_ParseTuple(args, "s", &str))
return NULL;

return PyLong_FromUnsignedLong(_hash(str));
}

static PyMethodDef HashMethods[] = {
{"hash", hash_hash, METH_VARARGS, "String Hash"},
{NULL, NULL, 0, NULL}
};

static struct PyModuleDef HashModule = {
PyModuleDef_HEAD_INIT,
"hash",
NULL,
-1,
HashMethods,
NULL,
NULL,
NULL,
NULL
};

PyMODINIT_FUNC
PyInit_hash(void)
{
return PyModule_Create(&HashModule);
}

setup.py:

# setup.py
from distutils.core import setup, Extension

module1 = Extension('hash', sources = ['hash_mod.c'])

setup (name = 'Hash',
version = '1.0',
description = 'String Hash',
ext_modules = [module1])

编译运行良好,但是当我尝试在解释器中导入我的哈希模块时,我的内存发生了巨大的跳跃,超过了 python.exe 进程的 2Go .

这是我的任务管理器显示内存使用情况的图片:

  1. >>> 导入哈希
  2. 导入哈希完成
  3. 退出python解释器

导入完成后,我可以使用我的模块,它运行良好,但内存似乎有点高。

在我看来,PyModule_Create 分配了非常大的内存。但我很确定这不会发生在其他模块中。

我错过了什么吗?

编辑:

当我已经使用了大量 RAM(超过 2.5Go/4Go)时,出现此错误:

>>> import hash
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
>>>

最佳答案

由于 Python 使用垃圾收集器,它不需要在任何特定时间释放内存,您可能会看到优化正在发生。

关于内存使用异常的 C Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com