计算Python脚本中的符号数

2024-07-07 06:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Telit模块,它运行[python1.5.2+](http://www.roundsolutions.com/techdocs/python/Easy_Script_python_r13.pdf)!. 我可以使用的变量、模块和方法名的数量(500)、每个变量的大小(16k)和RAM的大小(约1MB)都有一定的限制。详见第113和114页。我想知道如何得到生成的符号的数量,每个变量的RAM大小,内存使用情况(堆栈和堆的使用)。在

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


Tags: 模块方法comhttp数量pdfwwweasy
2条回答

这篇文章让我想起了我曾经对Telit GM862-GPS模块的痛苦。我的代码正是在变量、字符串等的数量加起来达到极限的时候。当然,那时我还不知道这个事实。我添加了一行无辜的,我的程序不再工作了。我把我逼疯了两天,直到我看了数据表才发现这个事实。在

您所寻找的可能没有一个好的答案,因为Python解释器不是一个成熟的版本。我所做的就是尽可能多地使用相同的局部变量名。此外,我删除了函数的doc字符串(这些也算在内),并用注释替换。在

最后,我想说的是,这个模块适合于小型应用程序。python解释器不支持线程或中断,因此您的程序必须是一个超级循环。当应用程序变得更大时,每次迭代都会花费更长的时间。最终,您可能希望切换到一个更快的平台。在

Python是一种解释型和动态类型的语言,因此生成这种输出非常困难,如果可能的话。我认为这是解释程序获取目标信息的唯一途径。在

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

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

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

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

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

相关问题 更多 >