C++只能通过变量这个映射元素来访问内存,在访问某块内存前,一定要先建立相应的映射,即定义变量。有什么坏处?让我们先来了解静态和动态是什么意思。
收银员×××,手动,则每次×××时,都用已经印好的发票联给客人×××,发票联上只印了4个格子用以记录商品的名称,当客人一次买的商品超过4种以上时,就必须开两张或多张发票。这里发票联上的格子的数量就被称作静态的,即无论任何时候任何客人买东西,×××时发票联上都印着4个记录商品名称用的格子。
超市的收银员×××,将商品名称及数量等输入电脑,然后即时打印出一张发票给客人,则不同的客人,打印出的发票的长度可能不同(有的客人买得多而有的少),此时发票的长度就称为动态的,即不同时间不同客人买东西,开出的发票长度可能不同。
程序无论执行多少遍,在申请内存时总是申请固定大小的内存,则称此内存是静态分配的。前面提出的定义变量时,编译器帮我们从栈上分配的内存就属于静态分配。每次执行程序,根据用户输入的不同而可能申请不同大小的内存时,则称此内存是动态分配的,后面说的从堆上分配就属于动态分配。
很明显,动态比静态的效率高(发票长度的利用率高),但要求更高——需要电脑和打印机,且需要收银员的素质较高(能操作电脑),而静态的要求就较低,只需要已经印好的发票联,且也只需收银员会写字即可。
同样,静态分配的内存利用率不高或运用不够灵活,但代码容易编写且运行速度较快;动态分配的内存利用率高,不过编写代码时要复杂些,需自己处理内存的管理(分配和释放)且由于这种管理的介入而运行速度较慢并代码长度增加。
静态和动态的意义不仅仅如此,其有很多的深化,如硬编码和软编码、紧耦合和松耦合,都是静态和动态的深化。
转载于:https://blog.51cto.com/fjksnake/1001589