设为首页 加入收藏

TOP

4.5.4 庞大的对象
2013-10-07 15:02:31 来源: 作者: 【 】 浏览:72
Tags:4.5.4 庞大 对象

4.5.4  庞大的对象

现在让我们考虑堆栈空间。对于许多系统,一个程序可利用的堆栈空间要比可利用的空闲的储空间少很多。(而可利用的空闲存储空间要比可利用的文件系统空间少很多。)

在任何给定的时刻内,程序使用的堆栈空间总大于栈中所有对象的大小总和(当我们所说的对象的大小,是指对象执行sizeof函数后返回的大小)。如果一个程序用完了所有的堆栈空间,往往都是由于下面两个原因中的其中一个造成的:一个错误的存在,导致了无数次的递归;或者在栈中创建一个或多个很大的对象。关于庞大的对象,考虑下面的代码:

  1. class Huge {  
  2.          char buf[1024 * 1024];       //1兆字节的对象。  
  3.          //...  
  4.     };  

如果程序在栈中创建一个Huge对象,很可能它(这个程序)会用完所有的堆栈空间。幸运的是,我们很少会创建一个如此大的对象。如果真地想要创建一个这样的对象,或者用户程序可能需要在栈中创建一个这样的对象,那么我们就应该从空闲存储空间分配所需要的内存空间,而不是从堆栈空间分配这些空间:
  1. class Huge_in_freestore {  
  2.     private:  
  3.          char* buf;  
  4.     public:  
  5.          Huge_in_freestore() : buf(new char[1024 * 1024]) {  
  6.              //...  
  7.          }  
  8.          ~Huge_in_freestroe() {  
  9.               delete[] buf;  
  10.          }  
  11.          //...  
  12.     };  

如4.5.2小节所讨论的那样,我们必须牢记要尽快地删除从空闲存储空间分配的对象。在这里,我们在类的析构函数中删除了Huge_in_freestore::buf对象。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.5.1 使用高效的算法 下一篇4.9.3 向异常传递信息

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: