Loading... **stack:**是存在于某作用域(scope)的一块内存空间(memory space)。Eg. 当调用函数,函数本身会形成一个stack用来放置它所接收的参数,以及放回地址。在函数本体(function body)内声明的任何变量,其所使用的内存块都取自上述stack。当离开改作用域时,这些变量会自动清理。在windows中,stack的大小一般为2M。 **heap:**或system heap,是指操作系统提供的一块global内存空间,程序可动态分配(dynamic allocated)从heap得到的块。heap会一直存在,需要自己手动delete。 ```cpp class Complex{...} Complex c(1, 2); { Complex c1(1, 2); static Complex c2(1, 2); Complex* p = new Complex(1, 2); delete p; } ``` auto object:c1,离开作用域时会自动清理 static local object:c2,离开作用域时仍然存在,直到程序结束 global object:c,在任何作用域之外的(大括号之外)全局作用域,一直存在到程序结束 heap object:p,需要自己手动delete,会存在内存泄漏。(离开作用域后,对象的生命已经结束,但内存仍然存在) 最后修改:2022 年 09 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏