gpt4 book ai didi

python - 计算 Python 脚本中的符号数

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:33 26 4
gpt4 key购买 nike

我有一个运行 [Python 1.5.2+] (http://www.roundsolutions.com/techdocs/python/Easy_Script_Python_r13.pdf) 的 Telit 模块!我可以使用的变量、模块和方法名称的数量 (< 500)、每个变量的大小 (16k) 和 RAM 的数量 (~ 1MB) 都有一定的限制。有关详细信息,请参阅第 113&114 页。我想知道如何获取生成的符号数量、每个变量在 RAM 中的大小、内存使用情况(堆栈和堆使用情况)。

我需要一些类似于映射文件的东西,它在链接过程后用 gcc 生成,它向我显示每个常量/变量、符号、它的地址和分配的大小。

最佳答案

Python 是一种解释型和动态类型的语言,因此生成这种输出非常困难,即使有可能。我认为获取此信息的唯一合理方法是在目标解释器上分析您的代码。

如果您正在寻找真正的内存映射,我怀疑是否存在这样的工具,因为 Python 不会经历与 C 或 C++ 相同类型的编译过程。由于当程序被解析和解释时,一切都在运行时初始化和分配,所以没有什么可以说一个解释器的行为与另一个解释器的行为相同,尤其是在你运行的这种情况下如此不同的架构。因此,毫无疑问您的对象将在相同的位置创建,甚至具有相同的整体内存结构。

如果您只是想确定内存占用量,您可以使用 sys.getsizeof(object, [default]) 进行一些手动检查,前提是它受 Telit 的库支持。我不认为他们使用的是 CPython 的直接实现。即便如此,这并不总是有效,如果您没有指定 default 参数,则在无法确定对象大小时会引发 TypeError

通过研究 dis 模块字节码反汇编的输出,您可能还会得到一些有趣的结果,但这是假设 dis 在您的解释器上工作,并且您的解释器是实际上作为 VM 实现。

如果您只想要一个符号列表,请查看 this recipe .它使用反射来转储符号列表。

良好的手动测试是这里的关键。最好的办法是设置模块的 CMUX(COM 端口 MUXing),并观察控制台输出。如果内存开始耗尽,您很快就会知道。

关于python - 计算 Python 脚本中的符号数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627401/

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