代码1**sum.cpp**intgdata=10;intsum(inta,intb){returna+b;}**main.cpp**externintgdata;intsum(int,int);intdata=20;intmain(){inta=gdata;intb=data;intret=sum(a,b);return0;}1:编译需要关注的几个点1:.o文件的格式组成是什么样子?2:.exe文件的组成格式是什么样子?3:"所有.o文件段的合并符号表合并后,进行符号解析"4:"符号的重定位(重定向)"5:"符号表的输出"=>"符号"6:符号什么时候分配虚拟地址?预编译以#开头的命令除#pr
代码1**sum.cpp**intgdata=10;intsum(inta,intb){returna+b;}**main.cpp**externintgdata;intsum(int,int);intdata=20;intmain(){inta=gdata;intb=data;intret=sum(a,b);return0;}1:编译需要关注的几个点1:.o文件的格式组成是什么样子?2:.exe文件的组成格式是什么样子?3:"所有.o文件段的合并符号表合并后,进行符号解析"4:"符号的重定位(重定向)"5:"符号表的输出"=>"符号"6:符号什么时候分配虚拟地址?预编译以#开头的命令除#pr
虚基类/抽象类抽象类:有纯虚函数的类代码1classA{public:intma;protcted:intmb;private:intmc;}//B继承A,classB:publicA{public:intmd;potected:intme;private:intmf;}虚继承通过修饰继承方式,如代码2是虚继承,被虚继承的类称为虚基类虚继承派生类的内存布局方式先是vbptr=>派生类的数据=>基类的数据,对比代码1和代码2,发现原本基类数据在前面,派生类数据在后面,但是在虚继承的时候基类数据方式放到了后面,前面放了vbptr和派生类数据.vbprt指向的是vbtable,vbtable中存储的
虚基类/抽象类抽象类:有纯虚函数的类代码1classA{public:intma;protcted:intmb;private:intmc;}//B继承A,classB:publicA{public:intmd;potected:intme;private:intmf;}虚继承通过修饰继承方式,如代码2是虚继承,被虚继承的类称为虚基类虚继承派生类的内存布局方式先是vbptr=>派生类的数据=>基类的数据,对比代码1和代码2,发现原本基类数据在前面,派生类数据在后面,但是在虚继承的时候基类数据方式放到了后面,前面放了vbptr和派生类数据.vbprt指向的是vbtable,vbtable中存储的
deque:双端队列容器(队头队尾都可入,出)底层数据结构情况动态开辟的二维数组,一维数组从2开始,以2倍方式进行扩容,每次扩容后,原来第二维数组从新的第一维数组的下标oldsize/2开始存储如下列图序满了扩容,扩容第1维,2倍扩dequedeq;增加:deq.push_back(20);从尾部添加,可能引起扩容O(1)deq.push_font(20);从头部添加,O(1)deq.insert(iterator,20);从迭代器指向的位置加入元素O(N)删除:deq.pop_back();//从尾部删除元素O(1);deq.pop_front();//从头部删除元素O(1);deq.era
deque:双端队列容器(队头队尾都可入,出)底层数据结构情况动态开辟的二维数组,一维数组从2开始,以2倍方式进行扩容,每次扩容后,原来第二维数组从新的第一维数组的下标oldsize/2开始存储如下列图序满了扩容,扩容第1维,2倍扩dequedeq;增加:deq.push_back(20);从尾部添加,可能引起扩容O(1)deq.push_font(20);从头部添加,O(1)deq.insert(iterator,20);从迭代器指向的位置加入元素O(N)删除:deq.pop_back();//从尾部删除元素O(1);deq.pop_front();//从头部删除元素O(1);deq.era