设为首页 加入收藏

TOP

21.2.4 改变大小
2013-10-07 01:15:10 来源: 作者: 【 】 浏览:82
Tags:21.2.4 改变 大小

21.2.4  改变大小

要改变栈上分配的内存大小,可以用C++(www.cppentry.com)的库函数的alloca()函数,其原型如下:

  1. void *alloca(size_t size); 

这个函数在调用它的函数的栈空间中分配一个size字节大小的空间,当调用alloca()的函数返回或退出的时候,alloca()在栈中分配的空间被自动释放。当alloca()函数执行成功时,它将返回一个指向所分配的栈空间起始地址的指针。

【示例21-7】 在栈上实现一个动态增长的变长数组。

  1. #include<iostream>  
  2. //内存管理的库函数头文件  
  3. #include <malloc.h>   
  4. int main(int argc, char *argv[])  
  5. {   
  6.     //在栈上,内存为10个int字节大小的内存存储单元  
  7.     int stackArray[10]={1,2,3,4,5,6,7,8,9,10};   
  8.     int i;  //在栈上  
  9.     int j;  //在栈上  
  10.     int *p; //在栈上  
  11.     /*输出原来存储在栈上的数组中的10个元素 */ 
  12.     std::cout << "the array before changed stack memeory: " << "\n";  
  13.     for(i=0;i<10;i++)   
  14.     {  
  15.         std::cout << stackArray[i] << "\t";     
  16.     }  
  17.     std::cout <<  "\n";  
  18.     p = stackArray;  //指向stackArray数组在栈上的内存地址  
  19.     p = (int *) alloca(sizeof(int) * 12); //修改所
    指向的stackArray数组在栈上
    的内存的大小,
     
  20.                        //增加2个int字节大小的内存存储单元。   
  21.                        //此时的statckArray在栈上分
    配的内存为12个int字节大小的内存存                    储单元
     
  22.     stackArray[10] = 99;    /* 新增的第11个数组元素 */ 
  23.     stackArray[11] = 100;   /* 新增的第12个数组元素 */ 
  24.     /*输出修改内存大小后的数组中的12个元素*/ 
  25.     std::cout << "the array after changed stack memory: " << "\n";  
  26.     for(j=0;j<12;j++)   
  27.     {  
  28.         std::cout << stackArray[j] << "\t";   
  29.     }  
  30.     return 0;  

程序执行时,显示结果如下所示。

  1. the array before chaged stack memory:  
  2. 1 2 3 4 5 6 7 8 9 10  
  3. the array after chaged stack memory:  
  4. 1 2 3 4 5 6 7 8 10 99 100 

分析:示例中,首先用语句行int stackArray[10]在栈上申请了一个10个int字节大小内存存储单元的栈数组。然后用C++(www.cppentry.com)库函数alloca()对stackArray在栈上的内存大小进行了修改,成为12个int字节大小的内存存储单元。这样增加了两个int字节大小的内存单元,从而实现了对栈数组stackArray动态地增加了两个int型的数组元素其值为99和100。

注意:用alloca()函数只能用于对栈内存的大小的修改。不能用于在堆上的操作。alloca()函数分配的内存不需要程序员来释放,它是由系统在程序或调用它的函数运行结束后自动释放。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.3.4 改变大小 下一篇21.5 上机实践

评论

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