做游戏模板下载网站有哪些内容,wordpress 后端,wordpress扫码支付宝,网站logo用什么做目录
1.自动存储
2.静态存储
3.动态存储#xff08;自由存储空间free store或堆heap#xff09;
4.线程存储#xff08;C11新增#xff09; 根据用于分配内存的方法#xff0c;C有3种管理数据内存的方式#xff1a;
1.自动存储
在函数内部定义的常规变量使用自动存…目录
1.自动存储
2.静态存储
3.动态存储自由存储空间free store或堆heap
4.线程存储C11新增 根据用于分配内存的方法C有3种管理数据内存的方式
1.自动存储
在函数内部定义的常规变量使用自动存储空间被称为自动变量这意味着它们在所属的函数被调用时自动产生在该函数结束时消亡。
实际上自动变量是一个局部变量其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。到目前为止我们使用的所有代码块都是整个函数。下一章将会看到函数内也可以有代码块。
自动变量通常存储在栈中。这意味着执行代码块时其中的变量将依次加入到栈中而在离开代码块时将按相反的顺序释放这些变量即后进先出。因此在程序执行过程中栈将不断地增大和缩小。
2.静态存储
静态存储是整个程序执行期间都存在的存储方式。使变量成为静态的方式有两种一种是在函数外面定义它另一种是在声明变量时使用关键字static
static double fee 56.50;
自动存储和静态存储的关键在于这些方法严格地限制了变量的寿命。变量可能存在于程序的整个生命周期静态变量也可能只是在特定函数被执行时存在自动变量。
3.动态存储自由存储空间free store或堆heap
new和delete管理了一个内存池。该内存池同用于静态变量和自动变量的内存是分开的。new和delete能够在一个函数中分配内存而在另一个函数中释放它。
与使用常规变量相比使用new和delete让程序员对程序如何使用内存有更大的控制权。然而内存管理也更复杂了。
在栈中自动添加和删除机制使得占用的内存块总是连续的但new和delete的相互影响可能导致占用的自由存储区不连续这使得跟踪新分配内存的位置更困难。
如果使用new在自由存储空间上创建变量后没有调用delete将发生什么情况呢
如果没有调用delete则即使包含指针的内存由于作用域规则和对象生命周期的原因而被释放在自由存储空间上动态分配的变量或结构也将继续存在。实际上将会无法访问自由存储空间中的结构因为指向这些内存的指针无效。这将导致内存泄漏。被泄漏的内存将在程序的整个生命周期内都不可使用这些内存被分配出去但无法收回。极端情况是不常见内存泄漏可能会非常严重以致于应用程序可用的内存被耗尽导致程序奔溃。另外这种泄漏还会给一些操作系统或在相同的内存空间中运行的应用程序带来负面影响导致它们奔溃。
4.线程存储C11新增