内核:内核是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统等等,决定着系统的性能和稳定性。是连接应用程序和硬件的桥梁。
一、内存五分区作用?
堆区:该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。 如果程序员没有手动释放,那么程序结束时可能由OS回收。
栈区:存放函数形参和局部变量(auto类型),由编译器自动分配和释放。
静态/全局区:存放全局变量和静态变量(包括静态全局变量与静态局部变量),初始化的全局变量和静态局部变量放在一块,未初始化的放在另一块。
文本区:常量在统一运行被创建,常量区的内存是只读的,程序结束后由系统释放。
代码区:存放程序的二进制代码,内存由系统管理。
二、栈
1、保存内容
局部变量、函数的形参和返回值;函数的调用关系。
通常<保护、恢复现场>遵循先进后出、后进先出(FILO)。
2、程序运行过程中的栈和数据结构中的栈有什么区别?
(1)程序运行过程中的栈:是系统栈,由系统维护。
(2)数据结构中的栈:是我们自己在内存中开辟的用来保存数据的结构,由自己实现、自己维护。
栈结构:只允许从一端进行数据的插入(入栈(压栈))与删除(出栈(弹栈))的线性存储结构。
3、分类
(1)数组模拟先进后出:顺序栈
满增长、满减栈、空增栈、空减栈。
①栈顶所在位置是否有元素?
满栈(有);空栈(无)。
②栈的增长方向?
增栈:(栈底)内存低地址—>内存高地址(栈顶);减栈:(栈底)内存高地址—>内存低地址(栈顶)。
(2)链表模拟先进后出:链式栈(stack)
表头作为栈顶,表尾作为栈底。——效率高
编程步骤:①创建栈;②入栈;③出栈;④清空栈;⑤判空;⑥获取栈顶元素;⑦销毁栈。
eg:
(1)头文件
(2)操作
(3)主函数调用
三、队列
主要用于缓存数据 ,采集—>队列—>发送。完成两线程间数据共享,之前用全局变量。
遵循先进先出、后进先出(FIFO)。
允许从一端插入数据(入队),另一端删除数据(出队)的线性存储结构。
分类:①数组:顺序队列;②链表:链式队列。
注:顺序队列存在假溢出问题(缓存区),一般用循环队列。
链式队列编程步骤:①创建队列;②入队;③出队;④判空;⑥清空队列;⑥获取队头y元素;⑦销毁队列。
eg:
(1)头文件
(2)操作
(3)主函数调用