-
C到C++/编译过程/链接方式/内存模型/STL
1.面向对象三个最重要的特性:
①封装 ②继承③多态
2.C++ VS C (C++是C的超集)
3.编译过程
- 1.预处理 Preprocessing
- 预处理命令cpp命令:cpp -o test.i test.cpp
- gcc/g++ 命令: gcc -E test.c -o test.i
- 2.编译 Compilation (网站:Compiler Explorer)
- 编译命令cc: cc test.i -o test.s
- gcc/g++命令:gcc -S test.i -o test.s
- 3.汇编 Assemble
- 汇编命令: as -o test.o test.s
- gcc/g++ 命令:gcc -c test.s -o test.o
- 4.链接 Linking
- 链接命令ld: ld test.o -o test
4.链接方式
- 1.静态链接
- 将源代码从静态链接库中拷贝到最终的可执行程序中。可能会导致最终目标文件很大。
- 2.动态链接
- 需调用的库函数以动态链接库形式存在,多个进程之间共享。链接时只需知道调用函数位置即可。
- 在程序执行时,当需要调用某个动态链接库函数时,操作函数首先查找所有正在运行程序,看内存中是否已经有该库函数的拷贝。如果有,则多进程之间可共享拷贝,否则会将其载入到该进程的虚拟内存。
5.内存模型
- C++程序内存分成5个区
- ①堆区 heap
- 堆在内存中位于bss区和栈区之间。由程序员分配和释放。
- ②栈区 stack
- 由编译器自动分配释放,存放函数的参数值、局部变量的值等。
- ③静态全局区 static
- 存放全局变量、静态数据、常量。程序结束后由系统释放。
- 堆VS栈
- 产生碎片
- 栈和数据结构中的栈原理相同,在弹出一个元素前,上一个已经弹出,不会产生碎片,而不停调用malloc/new、free/delete会造成很多内存碎片
- 分配方式
- 静态分配是编译器完成的,如局部变量分配。动态分配由malloc/new函数分配。
- 栈的动态分配和堆的不同,动态分配是由编译器进行释放,无需手工实现。
- 分配效率
- 栈是极其系统提供的数据结构,计算机在底层提供栈的支持,分配专门的寄存器来存放栈地址,压栈出栈有相应指令,比较快。
- 堆是由库函数提供的,机制很复杂,库函数按照一定算法进行搜索内存,比较慢。
6.STL
- queue
- stack
- string
- hash_map(非标准)
- 声明:hash_map<key_type, value_type, hash_func> h;
- 判断某个key值是否在hash_map中:h.find(key)
- 将value存储在key位上:h[key] = value
- unordered_map(C++11标准)
- 声明:unordered_map<key_type, value_type, hash_func> h;
- 判断某个key值是否在hash_map中:h.find(key)
- 将value存储在key位上:h[key] = value
7.编码规范
- 重要性:
- 原则:
- 好的版式易于阅读,学会用换行和注释做代码片段区隔。
-
相关阅读:
Bigkey问题的解决思路与方式探索
为什么要在电影院装监控?有什么作用?
【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径
二进制方式部署consul单机版
CentOs7 配置jar包开机自启动
最简最快了解RPC核心流程
第三章:SQL聚合与排序
企业如何加强合同风险控制?
数据分析面试
【算法题】2874. 有序三元组中的最大值 II
-
原文地址:https://blog.csdn.net/u011616934/article/details/125418280