1)锁相关的问题
///
2)强制转换
1) reinterpret_cast
类型之间的强制转换
2) static_cast
- 父类和子类之间指针或者引用的转换
上行转换是安全的:子类转为父类是类型安全的!!!
下型转换是不安全的:父类转换为子类是不安全的!!!
- 空指针转换为目标类型的空指针- 任何类型的表达式转换为void类型
3) dynamic_cast
子类和父类之间的转换是安全的
怎么实现的??
include
using namespace std;
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
r++;
cout<
int main(){
ConstTest1();
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
- 当开辟的空间小于128K时,调用brk()函数、依靠移动指向堆段的末尾地址来实现....- _edata+30K只是完成虚拟地址的分配,A这块内存现在还是没有物理页与之对应的,等到进程第一次读写A这块内存的时候,发生缺页中断,这个时候,内核才分配A这块内存对应的物理页。**也就是说,如果用malloc分配了A这块内容,然后从来不访问它,那么,A对应的物理页是不会被分配的。**- **brk分配的内存需要等到高地址内存释放以后才能释放(例如,在B释放之前,A是不可能释放的,因为只有一个_edata 指针,这就是内存碎片产生的原因,什么时候紧缩看下面)**- 当malloc 大于 128K 的内存,使用 mmap 分配(munmap 释放)
