2个回答
2013-06-28
展开全部
静态与动态内存分配的两个主要区别是:
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。
2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但不需要做任何事情。相反,动态对象的分配与释放,必须由程序员显示地管理,相对来说比较容易出错,它通过new和delete两个表达式来完成。
对象的动态分派可通过new表达式的两个版本之一来完成。第一个版本用于分配特定类型的单个对象
例如: int *pint = new int(1024);
表达式返回对象在内存中的地址。接着,这个地址被用来初始化指针对象pint。
new表达式的第二个版本,用于分配特定类型和位数的数组。
例如:int *pia=new int[4];
分配了一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显式地指定一个初始值。
当用完了动态分配地对象或对象地数组时,我们必须显式地释放这些内存。我们可以通过使用delete表达式地两个版本之一来完成这件事情,
例如:删除单一对象
delete pint;
数组形式地delete表达式为:
delete [] pia;
如果忘记删除动态分配地内存,程序就会在结束时出现内存泄漏(memory leak)的问题。
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。
2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但不需要做任何事情。相反,动态对象的分配与释放,必须由程序员显示地管理,相对来说比较容易出错,它通过new和delete两个表达式来完成。
对象的动态分派可通过new表达式的两个版本之一来完成。第一个版本用于分配特定类型的单个对象
例如: int *pint = new int(1024);
表达式返回对象在内存中的地址。接着,这个地址被用来初始化指针对象pint。
new表达式的第二个版本,用于分配特定类型和位数的数组。
例如:int *pia=new int[4];
分配了一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显式地指定一个初始值。
当用完了动态分配地对象或对象地数组时,我们必须显式地释放这些内存。我们可以通过使用delete表达式地两个版本之一来完成这件事情,
例如:删除单一对象
delete pint;
数组形式地delete表达式为:
delete [] pia;
如果忘记删除动态分配地内存,程序就会在结束时出现内存泄漏(memory leak)的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
2013-06-28
展开全部
相对于静态而言的 动态就是程序执行过程中 用到了才去分配 静态就是一开始就分配好的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询