2011年10月10日
摘要: C/C++内存知识(四)有了malloc/free 为什么还要new/delete ?malloc与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放 阅读全文
posted @ 2011-10-10 16:23 影一辉 阅读(210) 评论(0) 推荐(0) 编辑
  2011年10月9日
摘要: C/C++内存知识(三)指针参数是如何传递内存的?如果函数的参数是一个指针,不要指望用该指针去申请动态内存。函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL,为什么?void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str is stillNULL still strcpy(str, "hello"); // 阅读全文
posted @ 2011-10-09 17:55 影一辉 阅读(239) 评论(0) 推荐(0) 编辑
摘要: C/C++内存知识(二)计算内存容量用运算符sizeof 可以计算出数组的容量(字节数)。int a[3],sizeof(a)的值是12(注意别忘了’\0’)。p是指针,指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p 所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针,如下示例:void Func(char a[100]){ cout<< sizeof(a) << endl; / 阅读全文
posted @ 2011-10-09 17:35 影一辉 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 4、文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。... 阅读全文
posted @ 2011-10-09 16:58 影一辉 阅读(227) 评论(0) 推荐(0) 编辑
  2011年9月30日
摘要: http://bbs.weiphone.com/read-htm-tid-564573.html 阅读全文
posted @ 2011-09-30 14:12 影一辉 阅读(177) 评论(0) 推荐(0) 编辑