动态申请内存和静态申请内存的根本区别在哪里了?

chenxidu 2008-11-06 04:06:30

在一个函数的内部:

char name[32] = "回帖也是善举" ; //--静态数组

char *name = new char[32] //--动态申请内存
memset(name ,0,sizeof(name));
strcpy(name ,"回帖也是善举");


想问一下,这两种申请内存的根本区别在哪里了?他们二者的利弊各是什么了?
...全文
1137 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2008-11-06
  • 打赏
  • 举报
回复 1
前一个在栈区
后一个在堆区
栈与堆的区别搜一下就明白了.
栈系统负责清理
堆由程序员自己负责释放
jackzhhuang 2008-11-06
  • 打赏
  • 举报
回复
楼上有人说了,存储区域不一样,new出来的什么时候释放由你决定,栈里面分配的你管不着,函数结束出栈的时候由系统回收。
我看你有戏 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenxidu 的帖子:]


在一个函数的内部:

char name[32] = "回帖也是善举" ; //--静态数组

char *name = new char[32] //--动态申请内存
memset(name ,0,sizeof(name));
strcpy(name ,"回帖也是善举");


想问一下,这两种申请内存的根本区别在哪里了?他们二者的利弊各是什么了?
[/Quote]

new出来的东西一定需要delete,否则会发生内存泄露

理论上是静态数组处理的速度快点

在已知数组长度的情况下请使用静态数组

在数组长度需要变化的时候,请使用动态数组





zhuwanglove 2008-11-06
  • 打赏
  • 举报
回复
在内存中的位置不同.栈与堆的区别
beck_zhou 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 devil_zuiai 的回复:]
char name[32] = "回帖也是善举" ; //在栈取分配,程序自动释放。

char *name = new char[32] //在堆区释放,delelte释放。不释放可能造成内存泄露。
动态申请可以自己定大小。
静态只能编写时固定大小。
[/Quote]
wryse 2008-11-06
  • 打赏
  • 举报
回复
静态申请得到的对象过了当前作用域就被释放掉了,动态new出来的则不会,需要手动释放掉,可以用来向作用域外传递数据……
另外,记得两者申请出来的内存一个是在堆中一个是在栈中的……
呃,俺基础不牢,还需高手确认说法……
dream19861009 2008-11-06
  • 打赏
  • 举报
回复
区别:申请的内存在不同的位置,静态申请的数组内容 如上面的"回帖也是善举" 则将被放到静态存储区域中,但 new char[32] 申请的内存是在堆上的
利弊:静态是事先分配好的,变量无效时,对应内存会自动释放,动态是临时分配的,但不用时需要释放内存,否则会造成内存泄露
devil_zuiai 2008-11-06
  • 打赏
  • 举报
回复
char name[32] = "回帖也是善举" ; //在栈取分配,程序自动释放。

char *name = new char[32] //在堆区释放,delelte释放。不释放可能造成内存泄露。
动态申请可以自己定大小。
静态只能编写时固定大小。

hhyttppd 2008-11-06
  • 打赏
  • 举报
回复
区别在于堆栈和自由存储区。
cyj626 2008-11-06
  • 打赏
  • 举报
回复
自己做菜和吃别人做的菜
哪个好吃?

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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