1)锁相关的问题
///

2)强制转换
1) reinterpret_cast (expression)
类型之间的强制转换

2) static_cast

  1. - 父类和子类之间指针或者引用的转换

上行转换是安全的:子类转为父类是类型安全的!!!
下型转换是不安全的:父类转换为子类是不安全的!!!

  1. - 空指针转换为目标类型的空指针
  2. - 任何类型的表达式转换为void类型

3) dynamic_cast
子类和父类之间的转换是安全的
怎么实现的??

4) const_cast
将const转换为非const
https://blog.csdn.net/lwbeyond/article/details/6213382?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165210510616782425143847%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165210510616782425143847&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-4-6213382-null-null.142^v9^control,157^v4^control&utm_term=cosnt_cast&spm=1018.2226.3001.4187

include
using namespace std;

void ConstTest1(){
const int a = 1;
int p;
p = const_cast<int
>(&a);
(p)++;
cout< cout<<
p<}

void ConstTest2(){
int i=3;
const int a = i;
int &r = const_cast(a);
r++;
cout< cout<}

int main(){
ConstTest1();

  1. ConstTest2();<br />}

1
2
4
4

3)进程通信
1)pipe管道
有名/匿名
2)消息队列
xxxxxxxx
3)共享内存
xxxxxx
4)信号量
xxxxxx
5)套接字

共享内存
https://www.cnblogs.com/linuxbug/p/4882776.html
1)mmap()系统调用
2) Posix 共享内存
3) System V共享内存

4)malloc 怎么实现的? 和new区别
///
https://blog.csdn.net/tonychan129/article/details/120519476
https://www.zhihu.com/question/33979489

  1. - 当开辟的空间小于128K时,调用brk()函数、依靠移动指向堆段的末尾地址来实现....
  2. - _edata+30K只是完成虚拟地址的分配,A这块内存现在还是没有物理页与之对应的,等到进程第一次读写A这块内存的时候,发生缺页中断,这个时候,内核才分配A这块内存对应的物理页。**也就是说,如果用malloc分配了A这块内容,然后从来不访问它,那么,A对应的物理页是不会被分配的。**
  3. - **brk分配的内存需要等到高地址内存释放以后才能释放(例如,在B释放之前,A是不可能释放的,因为只有一个_edata 指针,这就是内存碎片产生的原因,什么时候紧缩看下面)**
  4. - malloc 大于 128K 的内存,使用 mmap 分配(munmap 释放)