了解 C 中的堆栈和堆使用
有效管理内存对于 C 编程至关重要。在确定变量的存储位置时,必须在堆栈和堆之间做出选择。
堆栈与堆:生命周期的问题
与流行的看法相反,性能不是在堆栈和堆之间进行选择的主要因素。主要区别在于变量的生命周期。
堆:存储对象、很少使用的变量以及需要比其声明函数更持久的大型数据结构。
具体示例清晰度
考虑以下代码片段:
class Thingy; Thingy* foo( ) { int a; // Stack-allocated integer Thingy B; // Stack-allocated Thingy object Thingy *pointerToB = &B; // Pointer to stack-allocated object Thingy *pointerToC = new Thingy(); // Heap-allocated Thingy object // Safe: Heap-allocated Thingy outlives foo() return pointerToC; // Unsafe: Stack-allocated Thingy will be destroyed upon foo() return return pointerToB; }
在此示例中:
尝试返回pointerToB 可能会导致崩溃,因为堆栈分配的对象它指向将被摧毁。
关键区别:计算机现实与语言抽象
理解堆栈概念需要更深入地了解底层机器。 “堆”和“堆栈”是编译器的发明,计算机的内存只是一个地址数组。通过检查调用堆栈和调用约定等概念,可以了解机器如何执行函数和管理内存。
以上是C 中的堆栈与堆:我什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!