答复: [cpp] 关于STL中string的问题

Wu Yongwei adah at sh163.net
Fri Mar 10 20:38:53 CST 2006


用 STL 的最大好处就是空间大小可以自动增长,不会发生缓冲区溢出(安全问
题)。否则,又何必付出缓慢的堆上分配的代价呢?&# 8213;&# 8213;除非要把结果传回去,那还
有意义;但最初苏益ꪏ提出的问题中并不存在这样的需求。

另外顺便提一下,如果栈上分配内存大小不固定,也不一定就要改用堆上分配。
C99 支持数组大小运行时决定(而非 C89/C++98 的编译时决定),而(不支持
C99 的)大部分 C/C++ 编译器也都支持一个非标准的 alloca 函数用于进行栈上
分配。这个函数通常由编译器内联实现,需要效率的场合会用得上。

另外,你测出的 50% 应当是总体的性能下降。纯粹的内存分配/释放操作,堆上分
配和栈上分配的性能根本不在同一个量级,差距通常在十倍以上。

吴咏炜

Li Jie wrote:
> 效率低一些,我实际测试的结果,使用vector耗时比snprintf要长50%左右。
> 不安全倒未必。
> 
> 在 06-3-5,Wu Yongwei<adah at sh163.net> 写道:
> 
>>呵呵,此处同意。vector加printf,又低效又不安全,两处没捞好。
>>
>>不过,要注意_snprintf和itoa都不是跨平台的标准函数。一般而言,使用
>>snprintf(没有下划线)哪儿都行。还有,第二个常数32我认为写sizeof buf比较好。


More information about the Cpp mailing list