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 影一辉 阅读(238) 评论(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) 编辑