免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 12126 | 回复: 41
打印 上一主题 下一主题

[C] 在函数中频繁定义大的数组会不会影响速度? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-10 10:54 |只看该作者 |倒序浏览
现在写程序, 多线程状态下运行, 有多个函数, 每个函数都可能会很频繁的使用大的数组
比如一个函数
void foo() {
    char tmp_buf[65535];
    other code;
     ......
}

我想问一下,这样频繁的在每个函数的堆栈上引用大的数组,会不会引起其他的问题, 因为程序不间断的运行,系统会变慢阿之类的问题

当然, 有人可能会建议 char* pBuf = new char[65535]; 然后在程序的最后delete []一下, 但是,  一个函数如果稍微长一点,不好维护.

所以就想直接用大数组

[ 本帖最后由 alazer 于 2008-1-10 11:01 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-10 10:58 |只看该作者
静态的,编译后不会,只是操作花时间,但是malloc动态分配的就影响速度了

论坛徽章:
0
3 [报告]
发表于 2008-01-10 11:04 |只看该作者
不好意思,应该是会的,函数调用进行堆栈应该是会的

论坛徽章:
0
4 [报告]
发表于 2008-01-10 11:06 |只看该作者
原帖由 nicolas.shen 于 2008-1-10 11:04 发表
不好意思,应该是会的,函数调用进行堆栈应该是会的

如果直接在函数内部char tmp_buf[65535]; 这样是在函数的栈上分配的阿

论坛徽章:
0
5 [报告]
发表于 2008-01-10 11:15 |只看该作者
看了一段汇编码,可能对你有帮助
http://blog.csdn.net/xgbing/archive/2006/03/08/618528.aspx

论坛徽章:
0
6 [报告]
发表于 2008-01-10 11:32 |只看该作者
原帖由 alazer 于 2008-1-10 10:54 发表
现在写程序, 多线程状态下运行, 有多个函数, 每个函数都可能会很频繁的使用大的数组
比如一个函数
void foo() {
    char tmp_buf[65535];
    other code;
     ......
}

我想问一下,这样频繁的在每 ...

你还是先别担心速度问题, 首先该担心程序的稳定性吧. new和静态数组,速度不会相差多少,但new是从堆中分配内存,可以没有上限. 而静态数组是在栈中分配内存,是有限的,分配多了,程序就core dump.

论坛徽章:
0
7 [报告]
发表于 2008-01-10 11:32 |只看该作者
不知道有没有人在编过的程序中定义过很大的数组??

我记得CU有篇精华,专门探讨栈上最多分配的内存数,一直没找到

论坛徽章:
0
8 [报告]
发表于 2008-01-10 11:34 |只看该作者
原帖由 alazer 于 2008-1-10 10:54 发表
现在写程序, 多线程状态下运行, 有多个函数, 每个函数都可能会很频繁的使用大的数组
比如一个函数
void foo() {
    char tmp_buf[65535];
    other code;
     ......
}

我想问一下,这样频繁的在每 ...

还忘了告诉你, 多线程状态下, 单个线程的栈的上限是:
PC平台, 64k
ibm AIX        256k
hp pa-risc    64k
hp ia64        256k
你自已考虑怎么用吧.

论坛徽章:
0
9 [报告]
发表于 2008-01-10 11:35 |只看该作者
我一般尽量避免编写这种频繁分配变量空间的代码,比如说

一个循环中
for()
{
    data t = XXX;
}

我写为:
data t;
for()
{
   t = XXX;
}

论坛徽章:
0
10 [报告]
发表于 2008-01-10 11:43 |只看该作者
从函数调用压栈来看是不会影响的,因为只要调用就存在将基址,返回地址,参数压栈,不管数组有多大都是一样的,只是可能会堆栈益处,上面仁兄的做法是局部的全局化是不错的,但有时候可能存在线程安全的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP