自动存储、静态存储、动态存储

el/2024/2/25 22:33:12

自动存储

在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),意味着它们所属的函数被调用时自动产生,在该函数结束时消亡

自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。

自动变量通常存储在栈中。这说明执行代码块时,其中的变量将以此压入栈中,而在离开时将按相反的顺序释放,即先进后出。

静态存储

静态存储是在整个程序执行期间都存在的一种存储方式。使变量成为静态的方式有两种:一种是在函数外面定义它;另一种是在函数中使用关键字static。

static int love = 520;

动态存储

new和delete操作符提供一种比自动变量和静态变量更灵活方法。它们管理一个内存池,在C++中称为自由存储空间(free store)或堆(heap)。内存池同用于静态变量和自动变量的内存是分开的。

使用new和delete让程序员对程序如何使用内存具有更大的控制权。然而内存管理也变得更加复杂。在栈中自动添加和删除机制使得占用的内存总是连续的。但new和delete的相互影响可能导致自由存储空间不连续。


http://www.ngui.cc/el/3574163.html

相关文章

continue在while和for循环中的区别

二刷primerPlus的时候发现了一个很有趣的细节,大家都知道continue的作用是跳过本次循环的剩余部分而直接开启下次循环。那么在for循环中,continue将跳转到更新表达式,然后跳到测试表达式处。而在while循环中,continue将直接跳转到…

读取数字循环

int n ; cin >> n; 总所周知,这段代码为输入一个整数,假设我输入了字符q那么结果又会如何呢?这种类型不匹配的情况将发生4种情况(同时发生): n的值保持不变;不匹配的输入将被留住输入队…

函数递归(浅)

函数递归即函数自己调用自己,注意在C中不允许,main()进行递归。 那有同学就会问,函数的递归这不就陷入了死循环嘛?答案是对的!因此我们需要给定一个判定条件,迫使调用链断裂,例如void类型的递归…

成员函数的内联方法

定义于类声明中的成员函数都将自动成为内联函数,类声明中常将短小的函数作为内联函数,也就是说在下面代码中set_tot()函数为内联函数。 class A {private:int a;int b ;public :int set_tot() {return a*b;} } 这段代码同理于下段代码: cl…

类作用域常量

在创建类作用域内的常量时,你可能以为这样可行: class A { private: const int Months 12 ; double consts[Months] ; } 其实这是个错误用法,因为类只是提供对象的创建方式,并不能创建对象,因此在A对象没有被…

作用域内枚举

传统的枚举,其中两个枚举中定义的枚举量可能会发生冲突。假设有一个处理鸡蛋和T恤的项目,其中包含类似的代码。 enum egg {small,medium,large,jumbo} enum t_shirt{small,medium,large,jumbo} 这将无法通过编译,因为egg中的small 和 t_shi…

自建类的赋值问题

潜复制和深复制以及复制构造函数_努力的小带土的博客-CSDN博客续潜复制及复制构造函数。 关于自建类的赋值问题假设存在类Tperson,如下所示:(主要用到的成员变量为_name 和address) class Tperson { private: char* _name ; char* address …

抽象类(简单描述)

使用一个通俗且易理解的方法来讲纯虚类,假设有鸟类,该类有个属性是鸟会飞,企鹅也属于鸟类,但企鹅不会飞,那我们不想在企鹅内部继承与飞相关的属性。在比如圆和椭圆,在数学定义中圆是属于特殊的椭圆&#xf…

使用using重新定义访问权限

在使用保护派生和私有派生时,基类的公有成员函数,将成为保护成员或私有成员。假设要让基类方法在派生类外可用,则此时就用到了using重新定义访问权限,假设存在以下类: class Student : private string, private valar…

matlab实现二阶锁相环参数设计

锁相环数学模型 图1 锁相环的复频域模型 锁相环是由鉴相器、环路滤波器、压控振荡器组成的,其中系统传递函数可以表示成 H ( s ) H(s) H(s),误差传递函数可以表示成 H e ( s ) H_e(s) He​(s)。其中参考公式可以参考《锁相环技术原理FPGA实现》。在此只给…