逐步的内存分配策略

时间:2017-05-30 14:02:18

标签: c memory-management

出于教学目的,我正在研究一个从标准输入中读取字符串(字符数组)的程序。目标是允许程序按顺序增加根据输入维度分配的内存。我希望你对我的方法有所了解。

我想我可以为每个需要的阅读周期逐个分配一个字节的空间。显然,它不起作用。我怎么能解决这个问题?是否值得尝试?

感谢您的耐心和支持!

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main(){
        char *q;
        int flag = 1, j = 0;
        printf("\n\nNow let's go for a word of undefined lenght. Type it:\n\n");
        do{
                q++ = calloc(1, sizeof(char));
                flag = ((q[j] = getchar()) != 0); #Until it is valid.
                ++j;
        }while(flag);
     return 0;
}

1 个答案:

答案 0 :(得分:1)

一次读取整个输入通常是错误的。

标准方法是获取几千字节的缓冲区并以该大小的块读取和处理数据,覆盖以前读取的数据,这些数据现在是无用的。

在极少数情况下,您需要将所有内容放在ram中并从常规文件中读取,您可以fstat文件以获取其大小并进行相应分配。如果文件很大(大小为兆字节),你应该mmap。

最后,在非常罕见的情况下,您需要阅读内容并且您无法提前知道大小,方法是每次重新分配加倍大小。即大小* = 2; new = realloc(p,size); p = new; ....