在将数据读入字符串时,最好使用尽可能多的public static String reduce(String w) {
// make sure w is not null
if (w == null) return null;
String result = Character.toString(w.charAt(0));
for (int i = 1; i < w.length(); i++) {
if(w.charAt(i) != w.charAt(i - 1)) {
result += w.charAt(i);
}
}
return result;
}
来获得正确的内存量,或者使用更少的realloc
更好,但是可能会以未使用的内存结束?
例如,这样更好吗?
realloc
还是更好?
char c;
int count = 1;
char* s = malloc(sizeof(char));
while((c = fgetc(file)) != EOF) {
char* snew = (char *)realloc(s, count*sizeof(char));
if(!snew) {
exit(1);
}
s = snew;
s[count-1] = c;
count++;
}
答案 0 :(得分:4)
这些天内存充裕,因此拥有准确的内存量并不像最小化运行时间那样重要。
第二种方案通常认为是更好的选择,在这种方案中,您可以在需要更多时间的任何时候将分配的内存加倍。
答案 1 :(得分:2)
如果您具有不受限制的行长,那么后者绝对是 更好,因为构建长度为n
的字符串的时间为O(n)
,而前者为{ {1}}由于不必要的复制。如果要减少过度分配,可以权衡较高的常量因子,例如,始终将缓冲区增加20%和 1个字符。
P.S。 fgetc
returns an int
-否则在O(n²)
未签名的平台上没有足够的内存...