为什么要申请动态内存分配使用权的问题:我想自己以前是根本没有任何的经验的。我的程序中几乎没有在堆中申请动态内存,全部都是在栈区中建立数组,但是数组的长度是有限的,根据测试表明,数组的存储的容量大概是400KB,所以在实现加解密程序的时候,仅仅是为了达到要求,并没有使用动态分配的技术。假设一个整型变量存储一个汉字的话,能够存储的字符个数大概是10万个汉字,那么动态分配的存储个数更是庞大。我的程序应该尝试使用并且懂得如何释放。
int* number=new int [100000000],可以申请10的8次方个整型的变量存储空间
int number[100000],可以申请20的5次方个整型的变量存储空间
在数量是两者之间的差距是非常大的,但是我们需要消耗CPU分配内存的开销为前提条件:
以下是两者在时间上的比较:
#include<iostream> #include<string.h> #include<time.h> using namespace std; int main() { //声明测试程序开始时间和结束时间的变量 clock_t start,finish1,finish2; start=clock(); //定义5000个指向字符串的指针 string* pstr[5000]; //在堆区申请内存,存储字符串变量 for(int i=0;i<5000;i++) { pstr[i]=new string; } finish1=clock(); for(i=0;i<5000;i++) { *pstr[i]="aaa"; } //销毁指针,回收堆区的内存,以便下次使用 for( i=0;i<5000;i++) { //下面的两种操作方式,到底哪一种是正确的 //delete[] pstr[i]; //Error delete pstr[i]; } finish2=clock(); cout<<finish1-start<<endl; cout<<finish2-finish1<<endl; return 0; } //测试结果表明:系统消耗3毫秒创建堆区对象,19毫秒销毁堆区对象 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include<iostream> #include<string.h> #include<time.h> using namespace std; int main() { //声明测试程序开始时间和结束时间的变量 clock_t start,finish1; start=clock(); //在栈区申请内存,存储字符串变量 for(int i=0;i<5000;i++) { string s="aaaa"; } finish1=clock(); cout<<finish1-start<<endl; return 0; } //测试结果表明:系统消耗10毫秒时间创建栈区对象的元素,与此同时,还已经包含销毁这些对象的时间
时间: 2024-11-10 08:27:07