Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105187
  • 博文数量: 18
  • 博客积分: 226
  • 博客等级: 二等列兵
  • 技术积分: 183
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-24 18:31
文章分类

全部博文(18)

文章存档

2013年(9)

2012年(7)

2011年(2)

我的朋友

分类: C/C++

2013-08-13 18:01:12


一、C之申请动态内存   
     头文件:alloc.h或malloc.h或stdlib.h
   申请空间
     malloc
        void *malloc ( size_t size ); //必须被free一次性释放 ,若size超出可用空间,则返回空指针值NUL

辟空间

  

calloc
        void *calloc ( size_t num_elements, size_t elements_size ) //calloc与malloc的区别就是在于calloc将开辟的内存块初始化为0,另外两者请求内存数量方式不同,calloc的参数是所需的元素个数和每个元素的字节数!
    realloc
        void *realloc ( void p, size_t new_size ); //修改一个原先已经分配的内存块大小。使用它使一块内存扩大还是缩小,若不能改变这块内存大小,将会开辟一块正确的内存,并将原来内存块上的内容,原样复制过去, 注意,新扩张的内存不进行初始化。
    释放空间
    free
        void *free(void *p);
二、C++之申请动态内存管理
    C/C++语言的内存管理经历了几次变革:
    从malloc/free到new/delete,这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换的需求。但是从内存管理角度看,这个变革并没有多少的突破性。    
     从new/delete到内存配置器(allocator)。allocator的引入也是C++内存管理一个突破,allocator比较强大,本人目前不常用,所以就忽略了。
    new运算符:为一个数据对象(结构或基本类型)获得并指定分配内存的通用格式如下:
    typeName* pointer_name = new typeName; //前面类型名指定声明合适的指针,后面指定什么样的内存。地址本身只指出了对象存储地址的开始,而没有指出其类型(使用的字节数)。    
    相应的释放:delete pointer_name;
    注: new分配的内存块通常与常规变量声明分配的内存块不同,常规变量在栈(stack)内存区域,而new从堆(heap)或自由存储区(free store)的内存区域分配
    new创建动态数组: typeName * pointer_name = new typeName [arr_num];

    delete释放:
    delete [] pointer_name; 带了方括号,则delete也要带方括号。
    注:对空指针使用delete是安全的。


阅读(1620) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~