控制c++的内存分配

控制c++的内存分配

ID:2089362

大小:33.00 KB

页数:3页

时间:2017-11-14

控制c++的内存分配_第1页
控制c++的内存分配_第2页
控制c++的内存分配_第3页
资源描述:

《控制c++的内存分配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、控制C++的内存分配2004-01-2509:00作者:出处:论坛责任编辑:方舟  在嵌入式系统中使用C++的一个常见问题是内存分配,即对new和delete操作符的失控。  具有讽刺意味的是,问题的根源却是C++对内存的管理非常的容易而且安全。具体地说,当一个对象被消除时,它的析构函数能够安全的释放所分配的内存。  这当然是个好事情,但是这种使用的简单性使得程序员们过度使用new和delete,而不注意在嵌入式C++环境中的因果关系。并且,在嵌入式系统中,由于内存的限制,频繁的动态分配不定大小的内存会引起很大的问题以及堆破

2、碎的风险。  作为忠告,保守的使用内存分配是嵌入式环境中的第一原则。  但当你必须要使用new和delete时,你不得不控制C++中的内存分配。你需要用一个全局的new和delete来代替系统的内存分配符,并且一个类一个类的重载new和delete。  一个防止堆破碎的通用方法是从不同固定大小的内存持中分配不同类型的对象。对每个类重载new和delete就提供了这样的控制。  重载全局的new和delete操作符  可以很容易地重载new和delete操作符,如下所示:void*operatornew(size_tsize)

3、{void*p=malloc(size);return(p);}voidoperatordelete(void*p);{free(p);}  这段代码可以代替默认的操作符来满足内存分配的请求。出于解释C++的目的,我们也可以直接调用malloc()和free()。  也可以对单个类的new和delete操作符重载。这是你能灵活的控制对象的内存分配。classTestClass{public:void*operatornew(size_tsize);voidoperatordelete(void*p);//..othermem

4、bershere...};void*TestClass::operatornew(size_tsize){void*p=malloc(size);//Replacethiswithalternativeallocatorreturn(p);}voidTestClass::operatordelete(void*p){free(p);//Replacethiswithalternativede-allocator}  所有TestClass对象的内存分配都采用这段代码。更进一步,任何从TestClass继承的类也都采用这一方式

5、,除非它自己也重载了new和delete操作符。通过重载new和delete操作符的方法,你可以自由地采用不同的分配策略,从不同的内存池中分配不同的类对象。  为单个的类重载new[]和delete[]  必须小心对象数组的分配。你可能希望调用到被你重载过的new和delete操作符,但并不如此。内存的请求被定向到全局的new[]和delete[]操作符,而这些内存来自于系统堆。  C++将对象数组的内存分配作为一个单独的操作,而不同于单个对象的内存分配。为了改变这种方式,你同样需要重载new[]和delete[]操作符。c

6、lassTestClass{public:void*operatornew[](size_tsize);voidoperatordelete[](void*p);//..othermembershere..};void*TestClass::operatornew[](size_tsize){void*p=malloc(size);return(p);}voidTestClass::operatordelete[](void*p){free(p);}intmain(void){TestClass*p=newTestClass

7、[10];//...etc...delete[]p;}  但是注意:对于多数C++的实现,new[]操作符中的个数参数是数组的大小加上额外的存储对象数目的一些字节。在你的内存分配机制重要考虑的这一点。你应该尽量避免分配对象数组,从而使你的内存分配策略简单。别忘了,唯一的频道选择就小编辑格子衬衫推荐http://www.gezishirt.com请勿转载

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。