C/C++的动态内存分配

内存分配方式有三种:
从静态存储区分配:内存在编译的时候已经分配好,这块内存在程序的整个运行期间都存在(例:全局变量、static变量)
在栈上创建:局部变量在栈上创建,函数执行结束时这些存储单元自动被释放。效率高,但容量有限。
从堆上分配:动态内存分配。程序员用时自己申请和释放,使用灵活,但会存在内存泄漏。  
 volatile:编译时不优化,执行时不缓存,每次需从内存中读出。
static
 全局变量:不允许从其他文件访问
 局部变量:变量不存储在堆栈中,它的值在整个程序的执行期一直保持。
动态内存开辟:
  calloc
    申请num个size大小的字节空间,但会之前把所有字节初始化为0
  realloc
     是解决之前所申请空间不足而产生的,如果后续空间满足新扩展空间大小就直接追加在后面 
  如果后续空间不足,则从堆上重新找一个空间进行申请。
malloc/free和new/delete的区别
 malloc/free是函数,new/delete是操作符。
 malloc/free需要手动计算申请的空间,而new/delete只需要加上书记类型即可。
 malloc/free申请空间时不需要调用构造函数和析构函数,而new/delete需要盗用构造函数
 malloc/free在类型不同时需要进行强制类型转换,而new/delete不用
 malloc/free需要进行判空,而new/delete不要,但new/delete需要进行异常捕获。
 new/delete比malloc/free更慢一些,因为new/delete底层是malloc/free的封装
class HeadOnly{
    public:
       static HeadOnly* Create()
       {
          return new HeadOnly;
       }
    private:
       HeadOnly(){}
       HeadOnly(const HeadOnly&){}
}

猜你喜欢

转载自blog.csdn.net/Mrek_fast/article/details/88713823