2018-2-18
i++ 返回的是右值; ++i返回的是左值
(1) 进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等
(2) 事件、临界区、互斥量、信号量可以实现线程同步
发生内存重叠时,拷贝应考虑从前到后还是从后到前。
// 对齐原则:每一成员需对齐为后一成员类型的倍数
// 补齐原则:最终大小补齐为成员类型最大值的倍数
判断语句中出现++ ,即使判false,也要执行++ , –
逗号表达式取最右值为结果
free释放的内存不一定直接还给操作系统,可能要到进程结束才释放。
malloc申请的是虚拟内存,并不是物理内存。
1 静态链接库的优点
(1) 代码装载速度快,执行速度略比动态链接库快;
(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。
2 动态链接库的优点
(1) 更加节省内存并减少页面交换;
(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;
(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
3 不足之处
(1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;
(2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。
友元:友元是单向的。 2. 友元就是我把秘密告诉你。 3. 不能被继承和传递。
int a[5];
&a表示一个指向大小为5数组的指针,那么&a+1就是表示一个指向大小为5的下一个数组的指针,也就是数组a最后一个元素的下一个位置1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。
2.普通成员函数与sizeof无关。
3.含有虚函数的类都会建立一张虚函数表,表中存放的是虚函数的函数指针,这个表的地址存放在类中。虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。不管有几个虚函数,都只占四个字节。
4.类的总大小也遵守类似class字节对齐的,调整规则。
include包括”“和<>这两种情况,”“实在用户工作目录下寻找(用户的工作目录是通过编译器指定的),<>是找系统标准库函数,通过系统环境变量指定系统库目录;
2018-1-30
double类型
- 8字节的共64位,按照标准的浮点数表示方法,应该是1位符号位,11位指数位,52位尾数位
- 小数点后的位权应该是2的负数次方才没有误差,其它的情况都有误差。
- float有一个符号位,8个指数位,23个尾数位
- float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
【逻辑表达式】 逻辑与 && (为0)或者逻辑或 ||(为1) 的表达式,先是判断一边,若一边可以判断整个表达式为真假时,另一边不再执行。
C++对数组初始化原则是:只要对数组中元素部分初始化,剩余元素都被编译器默认初始化为0.
【左移和右移】在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
- a = a^(31);此函数就是求取一数与31异或后的值
- ^符号表示 【异或】
sizeof 类
类的大小只与成员变量(非static数据成员变量)和虚函数指针有关,还要考虑到对齐.
1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。
2.普通成员函数与sizeof无关。
3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节 。
4.类的总大小也遵守类似class字节对齐的,调整规则。
使用switch要加上break,否则会从switch的case开始依次执行下面每一个case
父类的指针访问虚函数访问的是子类的方法
指针指向字符串时,字符串是常量,存储在常量区,而指针存储在栈区,不能对其操作修改。
虚函数必须是类的一个成员函数,不能是友元函数,也不能是静态的成员函数
动态分配在堆中,其它的内存分配都在栈上进行。
clock()就是该程序从启动到函数调用占用CPU的时间
time( &t );为获取系统时间
localtime(&t); 将一个UTC时间转为本地时间
对一个char*串执行strlen的结果未统计’\0’所占用的1个字节。