社区
C语言
帖子详情
静态&动态内存分配效率的问题
axs
2002-09-04 09:00:05
正在学习C++,老师说静态分配要比用new速度快一些
可是我不明白new函数到底做了些什么,反正我试着连续申请10000次,程序也没慢
哪位大侠可以讲解讲解?
...全文
385
9
打赏
收藏
静态&动态内存分配效率的问题
正在学习C++,老师说静态分配要比用new速度快一些 可是我不明白new函数到底做了些什么,反正我试着连续申请10000次,程序也没慢 哪位大侠可以讲解讲解?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 位操作系统支持“虚存”,内存用完了,
自动用硬盘空间顶替。
【C/C++】
静态
内存分配与
动态内存分配
编译时内存分配或
静态
内存分配 (Compile-time or Static Memory Allocation)运行时内存分配或
动态内存分配
(Run-time or Dynamic Memory Allocation)
静态
内存分配
静态
内存分配是由编译器为声明的变量分配内存。内存的地址可以通过地址操作符找到,并且可以赋值给指针变量。该内存是在编译时分配的。
动态内存分配
在程序执行时 (execution) 或 运行时 (run-time) 进行的内存分配被称为
动态内存分配
。库函数例如calloc()
静态
、
动态内存分配
比较
首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐。动态分配内存与
静态
分配内存的区别: 1)
静态
内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源; 2)
静态
内存分配是在栈上分配的,动态内存是堆上分配的; 3)
动态内存分配
需要指针或引用数据类型
动态分配内存与
静态
内存
1)
静态
内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源; 2)
静态
内存分配是在栈上分配的,动态内存是堆上分配的; 3)
动态内存分配
需要指针或引用数据类型的支持,而
静态
内存分配不需要; 4)
静态
分配内存需要在编译前确定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境确定需要的内存块大小,按照
动态内存与
静态
内存有何优劣?嵌入式如何选择?
在实时嵌入式系统中,由于系统软件并不像PC上复杂,一般都是很简单的内存使用,所以一般也不使用动态内存管理,但是随着RTOS面临的任务越来越重,尤其是IoT和AIoT的到来,让许多消费级产品运行的RTOS的负担越来越重。2. 创建的空间不同:堆都是动态分配的,没有
静态
分配的堆。2.
静态
内存由于是编译阶段分配好的,而动态内存是由运行中分配,这样动态内存可以被高效复用,当某段程序使用完毕后,可以将内存交换给内存池中等待下次程序的分配,由于这种机制,开发者可以利用更小的内存开发更大型的程序。
静态
分配和动态分配内存的区别
要弄懂这个
问题
,首先你得知道
静态
和动态指的是什么。个人觉得卡耐基上的解释很经典: “The word static refers to things that happen at compile time and link time when the program is constructed—as opposed to load time or run time when th
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章