学习内存、编译和链接,弄清编程语言的内在机理。
学习内存、编译和链接,弄清编程语言的内在机理。
C++ 支持面向过程编程、面向对象编程和泛型编程
动态库和静态库:
谁能简单明白易懂说明一下.a .o .so 这几个文件到底啥区别
1、是静态库类似NT下的lib
2、是对象文件。就是编译成程序时的半成品。
3、是动态库类似NT下的DLL
程序运行的流程:
操作系统会把物理硬盘上的代码 load 到内存
加载到内存后会把 c 代码分成 4 个区
然后系统会找到 main 函数的入口去执行
回调采用的2种方式
1. c++种的接口
2. c中的函数指针
函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码
C/C++ 代码生成可执行文件的过程:
need-to-insert-img
8. c++底层原理(汇编)
栈平衡:
c++ 编译后盛出的是啥?
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
在VS中,不管是32位系统还是64位系统,int型都是4字节,只有指针类型不同(因为地址位数不同,造成寻址不同,造成指针大小不同)
————————————————
7. 深拷贝和浅拷贝
浅拷贝:简单的赋值拷贝操作(这个是系统默认提供的)
深拷贝:在堆区重新释放空间,进行拷贝操作(要自己写的)
简单来说,只要类属性里有指针等就必须利用深拷贝操作
demo:
网友评论