[入门] 栈上数组陷阱
qiezi
2008-04-06
import std.stdio; import std.stream; void main() { char[char[]] map; File file = new File(__FILE__); while(!file.eof()) { char[128] buf; char[] line = file.readLine(buf); if (line.length < 5) continue; char[] token = line[0..5]; map[token] = 1; writefln("token: ", token, ", value: ", 1); } foreach(k, v; map) writefln("key: ", k, ", value: ", v); } 运行结果会看到map的所有key都相同,但却有许多key。 这个陷阱在std.stream.Stream.opApply里面也存在: void main() { InputStream stream = xxx; foreach(line; stream) { map[line[0..5]] = 1; } } opApply里面在栈上分配了个128个元素的数组,当一行长度小于等于128字节时,line数组指向栈空间;当长度超过128时,数组会重新在堆上分配,就没有这个问题了。 |
|
oldrev
2008-04-07
越来越觉得还是 tango 靠谱
|