相关疑难解决方法(0)

C++,__ try和try/catch/finally

我想知道一下C++ try/catch/finally块.我已经看到这些命令有两个下划线,如__try.但MVSC 2010项目也没有下划线.所以你什么时候需要这些下划线?

c++ exception-handling finally try-catch

42
推荐指数
3
解决办法
5万
查看次数

如何在python中导致堆栈溢出和堆溢出

我试图了解python如何管理堆栈和堆.所以我想做一些"坏"编程并导致堆栈溢出和堆溢出.我不明白的是为什么字符串例如去堆叠而其他所有去堆.这只是设计师的一致意见吗?这些例子是否正确?从我所看到的内容中,python中的所有内容都是在堆中生成的,因为它面向对象,对吧?

编辑:我认为像C这样的语言的堆栈有一个固定的长度但在python中甚至堆栈是动态分配的,因为Anycorn在他的回答中说.这就是为什么如果我尝试一个大字符串(在堆栈上)或一个列表(在堆上)我也获得完整的内存.如果我错了,请纠正我.谢谢

来自http://docs.python.org/c-api/memory.html

Python中的内存管理涉及包含所有Python对象和数据结构的私有堆.Python内存管理器在内部确保对此私有堆的管理.Python内存管理器具有不同的组件,可处理各种 动态存储管理方面,如共享,分段,预分配或缓存.

在最低级别,原始内存分配器确保私有堆中有足够的空间通过与操作系统的内存管理器交互来存储所有与Python相关的数据.在原始内存分配器之上,几个特定于对象的分配器在同一堆上运行,并实现适合于每种对象类型的特性的不同内存管理策略.

这里有些例子.您可以将它们复制粘贴到Python官方可视化工具中,但使用较小的值会导致它无法运行...

对于堆栈溢出:

import time
word = "test "
x = word*1000000000
time.sleep(10)
print ("this message wont appear if stack overflow has occurred!") 
Run Code Online (Sandbox Code Playgroud)

我明白了

x = word*1000000000
MemoryError
Run Code Online (Sandbox Code Playgroud)

如果我删除一个零则运行.我使用时获得最大内存使用x = word*500000000 因此我无法使堆栈溢出,因为即使堆栈是动态分配的?

对于堆溢出:

i = 10000
test_list = [0]
while i > 0 :
    test_list [:0] = test_list #insert a copy of itself at the beginning
    i -= 1
Run Code Online (Sandbox Code Playgroud)

现在我不明白的是垃圾收集器如何在程序中启动.它是否在堆栈和堆上运行,因为它们都是动态分配的?是由于O/S内存管理器吗?这些事情告诉我们有关python编程语言的特征的什么?这是否可以证明"动态语言"或"解释"一词的合理性?很抱歉这个问题很长,但我只想澄清一些事情.提前致谢!

EDITED
我找到了我想要的东西:如果你sys.setrecursionlimit(N)用比你的系统实际处理的N值更大的值来调用你可以导致'真正的'堆栈溢出 ,然后尝试递归到那个深度.在某些时候,您的系统将耗尽堆栈空间,Python解释器将崩溃.

python stack-overflow heap python-3.x

5
推荐指数
2
解决办法
4792
查看次数