静态&动态内存分配效率的问题

axs 2002-09-04 09:00:05
正在学习C++,老师说静态分配要比用new速度快一些
可是我不明白new函数到底做了些什么,反正我试着连续申请10000次,程序也没慢
哪位大侠可以讲解讲解?
...全文
385 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2002-09-07
  • 打赏
  • 举报
回复
以前的如楼上兄弟说的,现在功能加强了
1)静态分配原指在硬盘数据中具有空间
例如我们声明
int c[50000] = { 0 };//程序进入内存时已经建立

int c[50000];//程序引导代码执行时建立
原先的编译程序就不同了
如果选中某些优化条件,现在的编译程序太复杂,不懂了。
2)即便是在程序引导代码执行时建立的空间效率也比new的要搞些,这包括
地址重定向等。
axs 2002-09-07
  • 打赏
  • 举报
回复
关于32位的虚存问题,我在林锐博士的 高质量c++编程 中看到过类似的说明
静态内存申请在编译时就已经分配好
而动态申请则在需要时通过new来申请
现在的困惑是 new 和 静态分配(比如使用数组)之间的效率是否相差大到一个不得不考虑的程度。例如TCP/IP协议每次为数据包申请内存和预留一块大内存来保存所有的数据包,这两种方式之间的性能差别是否较大?
zheng_can 2002-09-04
  • 打赏
  • 举报
回复
静态分配的话,是在程序读入内存后就分配空间,在运行的时候,自然就不会花时间在这个上面
用 new 进行动态分配,是在运行的时候分配内存,那自然会导致运行过程慢一点点
耙子 2002-09-04
  • 打赏
  • 举报
回复
to :arcsiny(诺亚方舟)
……对于32位程序而言,new 和 malloc几乎不可能
导致“内存耗尽”。。因为32 位操作系统支持“虚存”,内存用完了,
自动用硬盘空间顶替。
……

这个观点是不对的,32bit的操作系统的寻址空间4G,win32里面实际每个进程的空间是2G,如果你的内存和硬盘足够大,申请到2G程序也不行了。
wqh136 2002-09-04
  • 打赏
  • 举报
回复
如果不是指针 , 则在编译时分配 ;而指针NEW是在运行时分配,故慢,效率底于静态分配的数据对向;
cxjddd 2002-09-04
  • 打赏
  • 举报
回复
new要向系统请求吧。
geeksky 2002-09-04
  • 打赏
  • 举报
回复
楼主请记清,new是操作符,不是函数
mechgoukiteng 2002-09-04
  • 打赏
  • 举报
回复
因为new会通过os申请内存,那么会导致寻找可用内存的过程
arcsiny 2002-09-04
  • 打赏
  • 举报
回复
下面的代码,就是一个试图耗尽内存的程序
void main(void)
{
float *p = NULL;
while(TRUE)
{
p = new float[1000000];
cout << “eat memory” << endl;
if(p==NULL)
exit(1);
}
}
对于new来说是C++的运算符。可用于申请动态内存。
不过,对于32位程序而言,new 和 malloc几乎不可能
导致“内存耗尽”。。因为32 位操作系统支持“虚存”,内存用完了,
自动用硬盘空间顶替。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧