1.vector是在堆上还是栈上? 在堆上.
2.我们发现指针有一些“似是而非”的特征:
(1)指针消亡了,并不表示它所指的内存会被自动释放。比如函数中的指针是局部变量,如果它指向了堆上,而自己出了函数后消亡了,但它所指向的内存还是存在的,导致了内存泄漏.
(2)内存被释放了,并不表示指针会消亡或者成了NULL 指针。
3. c++中有些重载赋值运算符为什么要返回引用
- 允许进行连续赋值
- 防止返回对象的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符的效率。
4.在Linux写代码好的方式:
Visual Studio + Visual Assist + VMWare + 共享文件夹
(在虚拟机中安装LINUX,把LINUX的系统的头文件拷出来,加入VA的包含路径,然后用VS在共享文件夹中创建项目,并在VS中编写代码,最后在LINUX中运行makefile)
5.CPU任何时候发出的地址都是虚拟地址,这个虚拟地址发给MMU后,MMU通过页表在页表里面查出这个虚拟地址对应的物理地址是什么,从而去访问外面的内存条
6.内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。
7. 原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切 [1] 换到另一个线程)(程序对信号量的操作都是原子操作)
8.map,vector的析构中带有垃圾回收机制,不需手动清空.
9共享内存在不同进程中映射的地址一样吗?
不一样.同一块物理内存被映射到进程A、B各自的进程地址空间.但是可以通过OS的帮助得到他们在不同进程的虚地址.