QQRead:http://www.qqread.com/cpp/i200429003.html
规则3 什么样的程序具备需要动态申请内存的特质呢?包含两种情况:
(1)不知道有多少要来,来了的又走了
不明白?这么说吧,譬如你正在处理一个报文队列,收到的报文你都存入该队列,处理完队列头的报文后你需要取出队列头的元素。
你不知道有多少报文来(因而你不知道应该用多大的报文数组),这些来的报文处理完后都要走(释放),这种情况适合用malloc和free。
(2)慢慢地长大
譬如你在资源受限的系统中编写一文本编辑器程序,你怎么做,你需要这样定义数组吗?
这个时候适合用malloc,因为你根本就不知道用户会输入多少字符,文本在慢慢长大,因而你也应慢慢地申请内存,用一个队列把字符串存放起来。
那么是不是应该这样定义数据结构并在用户每输入一个字符的情况下malloc一个CharQueue空间呢?
不,这样做也不对!这将使每个字符占据“1+指针长度”的开销。
正确的做法是:
让字符以100为单位慢慢地走,当输入字符数达到100的整数倍时,申请一片CharQueue空间。
更多内容请看C/C++技术专题、Java编程开发手册专题,或进入讨论组讨论。
规则3 什么样的程序具备需要动态申请内存的特质呢?包含两种情况:
(1)不知道有多少要来,来了的又走了
不明白?这么说吧,譬如你正在处理一个报文队列,收到的报文你都存入该队列,处理完队列头的报文后你需要取出队列头的元素。
你不知道有多少报文来(因而你不知道应该用多大的报文数组),这些来的报文处理完后都要走(释放),这种情况适合用malloc和free。
(2)慢慢地长大
譬如你在资源受限的系统中编写一文本编辑器程序,你怎么做,你需要这样定义数组吗?
char str[10000];
不,你完全不应该这么做。即使你定义了一个10000字节大的字符串,用户如果输入10001个字符你的程序就完完了。这个时候适合用malloc,因为你根本就不知道用户会输入多少字符,文本在慢慢长大,因而你也应慢慢地申请内存,用一个队列把字符串存放起来。
那么是不是应该这样定义数据结构并在用户每输入一个字符的情况下malloc一个CharQueue空间呢?
typedef struct tagCharQueue
{
char ch;
struct tagCharQueue *next;
}CharQueue;
不,这样做也不对!这将使每个字符占据“1+指针长度”的开销。
正确的做法是:
typedef struct tagCharQueue
{
char str[100];
struct tagCharQueue *next;
}CharQueue;
让字符以100为单位慢慢地走,当输入字符数达到100的整数倍时,申请一片CharQueue空间。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- C/C++技术专题 (1637篇文章)
- Java编程开发手册 (8276篇文章)
- Java语言和C++语言的差异 (29次浏览)
- 在C++中实现四种进程或线程同步互斥的控制 (0次浏览)
- Ubuntu下面的C语言代码检查工具 Splint (0次浏览)



