第3章 说一说“内存管理”的那点事儿
在C++(www.cppentry.com)的世界里,“烫”和“屯”是我们遇到得最多的两个汉字(限于VC用户)。可能有人不禁要问:这是为什么呢?
答案是:在VC中,栈空间未初始化的字符默认是-52,补码是0xCC。两个0xCC ,即0xCCCC在GBK编码中就是“烫”;堆空间未初始化的字符默认是-51,两个-51在GBK编码中就是“屯”。 二者都是未初始化的内存。
C++(www.cppentry.com)赋予了我们直接面对内存、操作内存的能力,但是内存管理却一直以来被认为是C++(www.cppentry.com)语言的一大难点。因为在C++(www.cppentry.com)语言中,缺少GC(垃圾回收器),内存管理需要程序员手动完成,并且还要为可能的失误承担后果。
正如下面的“代码故事”:
- #include <stdio.h>
- #include <stdlib.h>
-
- /*
- 在经历过无数的"烫烫烫烫烫","屯屯屯屯屯屯"之后,
- 我们都知道了:内存原来是可以驾驭的...
- */
-
- int main()
- {
- /*
- 原来内存管理是这样的,即便结果完美无缺,
- 但却危机四伏...
- */
- const char *src="Hello Csdn!";
- char *dest=(char*) malloc(strlen(src));
- memcpy(dest,src,strlen(src)+1);
- printf("%s\n",dest);
-
- return 0;
- }
- /*
- 代码结束了,故事也到此为止。但是我们要做的还很多。
- 希望我们能少遇到一点烫和屯...
- */
所以,我们要说说内存管理那点事儿,争取早日练就内存管理的高深技艺。