C++
来源:互联网 发布:汽车防盗芯片编程器 编辑:程序博客网 时间:2024/04/28 22:24
1.malloc/free和new/delete的区别
malloc/free是C语言的标准库函数,new/delete是C++的运算符。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内。
对于用户自定义的对象而言,用malloc/free无法满足动态管理对象的要求
new是类型安全的,malloc不是。int a-new float[2] 是通不过编译的,new内置了sizeof类型转换和类型安全检查功能。而malloc返回类型是void*,malloc只负责申请空间。
对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作,malloc则没有,calloc初始化,内卡为0.对于内部数据类型需要圆括号new才执行初始化工作。string属于非内部数据类型。int arr-new[10]IMC有初始化,int arr-new int [10];初始化为0;
2.多进程与多线程编程的区别
子进程会复制父进程的数据空间、堆、?,而创建线程则不会发生复制,变量在线程之间都是共享的。
对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访问时,如果要保证线程安全,则必须通过加锁的方式。
3.线程安全和可重入的关系
可重入的函数一定是线程安全的,但反过来不一定成立。
线程安全:一个函数被称为安全的,当且仅当被个多个并发线程反复调用时,它会一直产生正确的结果。
可重入:程序执行某个函数A时,收到信号,于是暂停目前正在执行的函数,转到信号处理函数,而这个信号处理的执行过程中,又恰恰也会进入刚刚执行的函数A。
要确保函数可重入,需满足一下几个条件:
1、不在函数内部使用静态或全局数据
2、不返回静态或全局数据,所有数据由函数的调用者提供
3、使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- C
- c
- C
- NavigateUr l动态参数 格式化参数
- unity3d Ngui UIFilledSprite(CD倒计时)
- js设置cookie
- Struts2 的 struts.xml 配置中 namespace 的使用
- 汇编语言调用Linux系统调用
- C++
- C++编程规范 组织和策略问题 学习 (2) --做代码审查
- kvm相关测试
- C语言不要重复包含.h头文件和.c文件
- WinCE Emulator使用介绍
- 多线程CountDownLatch用法
- 缓存管理公用类(通过委托更新缓存)
- Rhythmbox中文乱码解决
- ATT格式汇编语言