| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 内存管理,宏函数 -> 正文阅读 |
|
[C++知识库]内存管理,宏函数 |
1、硬件(静态存储) VS 内存(动态存储) 2、为什么所有的编程都关注内存管理?--- 内存属于稀缺资源 3、编程过程中,内存管理主要做什么?---(防止内存泄露) 4、如何防止内存泄露?(用户自己管理、系统管理(GC:垃圾回收机制)) 用户自己管理:缺点:对用户的要求比较高(良好编码习惯,经验值) ? ? ? ? ? ? ? ? ? ? ? 优点:开销小,实时性高 系统管理(GC:垃圾回收机制):优点:能够有效的防止内存泄露 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 缺点:开销大,实时性差,用户无法干预 5、C语言防止内存泄露方法:1、养成良好的编码习惯2、内存区域的划分(Linux虚拟地址空间)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3、动态分配内存的方式选择 内存池:(将使用多次malloc操作改变成只使用1次) 预处理 1、预处理主要任务:? 头文件展开 宏替换 条件编译 2、头文件展开 : #include<> VS #include"" <>:包含系统定义的头文件(/usr/include),搜索路径:/usr/include系统的头文件目录; "":包含自定义de头文件,搜索路径:先在当前目录查找,再到系统的头文件目录查找; gcc -l指定头文件第三方搜索路径; 3、宏替换: A\宏语法:#define NAME Value 面试题 自定义函数VS宏函数 自定义函数浪费运行时间;宏函数浪费编译时间 自定义函数占用空间因为要给形参分配空间浪费运行时间 宏函数只做傻瓜式替换浪费编译时间不占用内存空间 常用的宏函数 #和## #的功能是将其后面的宏参数进行字符串化操作 ?内置宏介绍_LINE__? ? _func__? _DATE__? _TIME__(自定义宏不要用_开头,容易与内置宏产生冲突 条件编译:按照给定的条件编译代码(只影响编译不影响运行) ? ?调试用 debug_msg 正常输出用printf 关键词 register????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????register使用:只能修饰变量,不能修饰函数? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?尽可能的将数据保存到CPU的寄存器中,提高程序的执行效率(省去了CPU通过总线从内存中抓取数据的时间) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????????????????????????????????????????寄存器有可能保存到CPU的内部寄存器中,省去CPU从内存中获取数据的时间,从而提高程序运行效率; static static:既能修饰局部变量,也能修饰全局变量,还能修饰函数; static在什么情况下使用? (2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; ? ? (3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内; ? ? (4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见; ? ? (5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? extern extern外部声明? 在当前文件中访问其他文件定义的全局变量或者函数: const const:修饰变量(局部、全局)????修饰变量,该变量成为一个只读变量(值是可以改变的)? ? ? ? ? ? ? ?const修饰变量:只读变量,对应的内存空间是可变的,但是不能通过变量名来修饰 使用注意事项:修饰某个变量时,一定要初始化 使用场景:修饰函数的形参,提供安全访问接口函数,防止函数实现过程中修改实参变量的值 typedef typedef:给数据类型重命名 typedef VS #define? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #define 不能定义复杂的类型(函数指针变量),typedef可以? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #define 预处理阶段做傻瓜式替换,存在风险(不做语法检查),不安全; 为什么要使用typedef给类型重命名?一是表明该类型的特殊作用, 二是将来有可能要改变这种类型(比如提高精度) 三是简化代码,便于批量修改具体类型。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #define VS const? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?定义常量? define更好 const定义的是局部变量? ? ? define在预处理阶段不做语法检查 所以不安全存在风险,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? inline inline:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?重复包含 ? ? ?---解决方法在头文件加? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:24:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |