Kagamine Len
文章20
标签10
分类2
tcp

tcp

进程与线程的内存空间

进程与线程的内存空间

堆排序

堆排序

堆排序的过程为

建堆 从最后一个非叶子节点(对于节点编号为0~n-1的树,最后一个非叶子节点为n/2-1),按照堆的定义调整堆(即选择当前这个节点两个儿子节点(i*2+1,i*2+2)中的最大值,然后交换当前节点和该最大值节点)

C++中static的初始化时间

C++中static的初始化时间

本次上传主要是关于静态局部变量的初始化问题。

首先,静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配好了内存,但在C和C++中静态局部变量的初始化节点又有点不太一样。在C中,初始化发生在代码执行之前,编译阶段分配好内存之后,就会进行初始化,所以我们看到在C语言中无法使用变量对静态局部变量进行初始化,在程序运行结束,变量所处的全局内存会被全部回收。而在C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始化必须执行相应构造函数和析构函数,在构造函数或析构函数中经常会需要进行某些程序中需要进行的特定操作,并非简单地分配内存。所以C++标准定为全局或静态对象是有首次用到时才会进行构造,并通过atexit()来管理。在程序结束,按照构造顺序反方向进行逐个析构。所以在C++中是可以使用变量对静态局部变量进行初始化的。

c++编译过程

c++编译过程

概述

C和C++编译器是集成的,编译一般分为四个步骤:

  1. 预处理(preprocessing) ————————- cpp/ gcc -E
  2. 编译(compilation) ————————— cc1 / gcc -S
  3. 汇编(assembly) —————————— as
  4. 连接(linking) ——————————- ld

2) 动态链接

在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。

对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。

ps:详见深入理解操作系统

面试发现的知识点缺失

面试发现的知识点缺失

const关键字

const关键字

引用

image-20210505101147641

image-20210505101344643

unity各个事件的调用顺序

unity各个事件的调用顺序

img

由图可见,unity为了保证fixedupdate的可靠性,就算在update中一次更新是十分缓慢的,但在fixedupdate中会循环执行直到当前fixedupdate能够执行到的时间与当前的时间相吻合。

父类与子类的各种构造函数的调用关系

父类与子类的各种构造函数的调用关系

Attention:

C++的初始化 base b=b(); or base b;调用的是构造函数 base d=b;仍然是一个对d的构造 因此应该调用拷贝构造函数而非拷贝赋值运算符

对于移动构造函数的情况间下列代码:

shareptr

shareptr

×