当前位置:网站首页>静态内存分配和动态内存分配小结
静态内存分配和动态内存分配小结
2022-06-12 18:03:00 【独立的精神信徒】
静态内存是由系统自动分配内存,由系统自动释放。静态内存是在栈中分配的,假如main函数调用另一个函数,那么就把被调用函数压到一个栈里面。执行这个被调函数就是使系统为这个函数分配的所有内存空间逐个出栈。出栈全部结束就是被调用函数执行完毕。
出栈的顺序是先进后出,也就是先进栈的后执行,因为先进栈被压在下面,所以执行的永远是栈顶的内容。程序执行完毕的意思就是“栈里面所有的内容全部都出栈了”。出栈就是“释放”。栈顶全部出栈后原来位于栈顶就会成为栈顶,然后继续执行该栈定内容,继续出栈。整个程序全部执行完毕的意思就是“系统所分配的内存空间全部出栈”,内存全部释放完毕。所以系统为静态变量分配的内存空间在程序中执行完毕后都会被释放。
而动态内存是由程序员手动释放,函数终止不会被系统自动释放。这说明他肯定不是在栈里面分配的。那他是在什么地方分配的呢?是在“堆中”分配的,栈是一种存储结构,堆不是一种存储结构,堆是分配内存的一种排序方式。也是说,动态内存是以堆排序的方式分配的。以前讲排序,如冒泡排序,插入排序,选择排序,快速排序。堆排序也是一种排序方式,因为动态内存是在堆中分配的,是以排序的方式分配的,不是在栈中,所以函数运行结束后也不会被释放。
也因为动态内存是由程序员手动分配,手动释放,所以这时候就会有一个比较严重的问题:如果忘记释放了,就会导致内存泄露,所以动态分配内存有优点,也有缺点。动态内存的使用非常灵活,但需要注意的问题也很多。
内存分配问题是一个非常复杂的问题。现在只是入门,所以不讲太多。
边栏推荐
- Article name
- This shift, I still have to go
- js求斐波那契数列
- High-Speed Layout Guidelines 未完...
- TypeScript高级类型(二)
- Write a select based concurrent server
- Remote gadget putty (Alibaba cloud mirror station address sharing)
- Vant3+ts encapsulates uploader upload image component
- Leetcode 674 longest incrementing substring
- Click the list page of vant3+ts+pinia tab to enter the details. The tab on the details page is highlighted in the original position, and the refresh highlight is in the first item by default
猜你喜欢

利用小程序快速生成App,只需七步

企业架构的第一性原理

小程序+App,低成本获客及活跃的一种技术组合思路
Goframe gredis configuration management | comparison of configuration files and configuration methods

极限编程--根源分析实践

JDBC several pits

Continued 2 asp Net core router basic use demonstration 0.2 acquisition of default controller data

C#简单介绍

消息队列存储消息数据的 MySQL 表格

C operation database added business data value content case school table
随机推荐
leetcode 674 最长递增子串
Schematic diagram of active differential crystal oscillator and differences among lv-pecl, LVDS and HCSL
Overall flow chart of kernel interrupt
Bug record: data truncation: incorrect datetime value:
利用小程序快速生成App,只需七步
Array sorts in the specified order
Changes in the third generation dri
有源差分晶振原理图以及LV-PECL、LVDS、HCSL区别
Office application cannot start normally 0xc0000142
使用MongoDB官方go库操作MongoDB原创
Random talk about redis source code 90
認識函數原創
JS中的数组(含leetcode例题)<持续更新~>
USB转串口那些事儿—最大峰值串口波特率VS连续通信最高波特率
Original error interface
js快速排序
Tutoriel de démarrage rapide JDBC
Second week of electric control learning
High speed layout guidelines incomplete
迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅