讨论用字符串:char buf[LEN] = {0}与char *buf =new char[LEN]; 当LEN为多大时需要用后者比较好。该如何解决

讨论用字符串:char buf[LEN] = {0}与char *buf =new char[LEN]; 当LEN为多大时需要用后者比较好。
char   buf[LEN]   =   {0}与char       *buf   =new       char[LEN];    
一般小于1k长度时我都喜欢用第一种方式,但现在如果这个LEN长度有2K或25k时,   用第一种方式还好不?   大家一般在   "LEN   > =   ? "   时用new??

------解决方案--------------------
嗯,一般来讲我很喜欢你种思路。
大小我一般也是 1024了。

但是此外,是栈是堆,也不是大小的问题啊,更主要取决于你的需要。

------解决方案--------------------
看你什么操作系统。
不过,我喜欢vector <char> /string
------解决方案--------------------
一般不要超过512k因为栈是有限的
不过我也一般用string vector <char>
------解决方案--------------------
如果知道长度不会大于1M的话,我一般都是第一种方式.大于1M vc需要设置编译参数
用第二种方式不知道会有多大的时候用第二种,或者需要传递到外面的时候
------解决方案--------------------
也要看char buf[LEN] = {0}这种变量在同一个作用域中多不多,如果太多的话,可以考试用后一种,如果少的话,而且生命周期不是太长,用第一种省事一些,也免得不小心搞出个内存泄漏。
不过vector <char> 实际上相当于第二种,因为内部实现内存分配是在堆上的,管理很方便,像取length很容易,但效率上比第一种要稍微低那么小小一点。
------解决方案--------------------
我的原则是能不new就不new... ...
------解决方案--------------------
还是不new比较保险。
------解决方案--------------------
如果你觉得你还不能很好的控制内存就不要去new了,省得要是这样的地方多了一个忘记释放内存就麻烦了
------解决方案--------------------
需要理解的是,第一种方法开的内存是在栈里的,而第二种方法是在堆里(也就是数据段)。
用第一种方法,当函数返回后,栈会pop出来,则内存就会在调用其他函数时被覆盖,这就是局部变量在函数返回后就不能使用的原因。
同时,栈的大小是有限的,比较大的内存应该用new来申请。
------解决方案--------------------
当年我写过这样的代码,呵呵

char buf[2*1024*1024] = {0};

理所当然fail掉了
------解决方案--------------------
我认为,需要较大内存而大小又未知的情况下,用new,就像楼上的楼上所说512K以上的,

另外,对于反复使用的内存,一定要只new一次,以后再重复使用,因为new会大幅度减慢速度,切勿在循环体内new然后又delete, 如果每次大小未知, 宁可牺牲一点内存,一次申请一个足够大的够每次使用的

我是做实时图像处理的,这方面做过测试,区别很大
------解决方案--------------------
堆上的内存是动态地通过操作系统去申请的,大小的限制和当前可用的物理内存有密切关系,而栈内存是编译时决定的,可以从编译器或者链接器的选项中去指定,运行时是有限的,这个或许我在说废话了,大家都知道。

如果是实时性要求比较高的环境,函数的调用会很频繁,栈内存是相当宝贵的,但另一方面要申请堆空间的话,相对来说会比较花CPU时间。所以我觉得这样的情况不妨结合当前编译指定的栈的大小和同一时间会被调用的函数数量去考虑。

------解决方案--------------------
char buf[LEN] = {0}与char *buf =new char[LEN]; ]

这样的话不如这样写
char * const buf = new charr[len];
记得new 出来的内存是得自己delete掉的

需要不同,用不同的方法

大家共同提高...
------解决方案--------------------
数组方便,呵呵
------解决方案--------------------
数组不大的情况下,用第一种,第一种的分配效率是第二种的成千上万倍,特别是频繁分配,能用第一种就用第一种
------解决方案--------------------
长度还是放在第2因素考虑吧
首先考虑的是使用情况
------解决方案--------------------
一般不new的,
------解决方案--------------------
是呀,能不NEW就尽量不NEW吧,要是NEW的话有很多其他要做的,内存的管理什么的,指针又是比较容易出错的!如果用的好的话,NEW是很好的方式。
------解决方案--------------------
char buf[LEN] = {0}是静态数组
char *buf =new char[LEN]; 是动态数组


什么时候用动态数组,什么时候用静态数组?