new/delete和malloc/free的关系
- new/delete是C++关键字,需要编译器支持。malloc/free是C/C++库函数。
- new/delete在创建和销毁时会调用构造/析构函数
new/delete和new []/delete []
- new/delete只会调用一次构造/析构函数,new/delete []会为每个成员调用。
- 前者操作整个数组,后者造作一个指针。
memcpy和memmove
- memcpy在内存重叠的情况下会出错,memmove进行了改进
1 | void* my_memmove(void* dst, const void* src, size_t n) |
如何修改int变量的第2个字节的值,交换第1个字节和第4个字节
*(((char *)&a)+1) = value;
先对int变量取地址,然后转为单字节变量指针,+1移位到第二字节,最后赋值value。
a &= 0xffff0ff; a |= value<<8;
先将第2字节置0,然后value移位赋值。
1 | char low,high; |
a = ((a&0xff)<<24 | (a&0xff000000)>>24 | (a&0xffff00));
看到网上也有用memmove,我觉得不必要, 还是位操作好一些吧,linux内核也是这么做的,但是易读性好像更差一些。
new/delete和operator new/delete
new operator 和 delete operator :new 和 delete 操作符(关键字),无法重载
operator new 和 operator delete:两个函数用来服务于 new 和 delete 操作符,以及对应的 operator new [] , operator delete [] 对应于 new [] 和 delete []相关的数组操作;这两个函数是可以被重载的,一般有全局默认的函数,自己也可以定义自己的,在定义C++类的时候也可以为某个class定制对应的 operator new 和 operator delete