【发布时间】:2013-05-05 13:10:26
【问题描述】:
我尝试以编程方式检查我可以分配多大的数组,但我的代码似乎没有检查它。如何让它更快?最后我想得到一个例外。
#include "stdafx.h"
#include "iostream"
using namespace std;
int ASCENDING = 1, DESCENDING = 2;
int tworzTablice(int rozmiar, char* t){
try{
t = new char[rozmiar];
delete []t;
}catch (std::bad_alloc& e){
tworzTablice(rozmiar - 1,t);
return -1;
}
return rozmiar;
}
int f(long p, long skok){
char* t;
try{
while(true){
t = new char[p];
delete []t;
p = p + skok;
}
}
catch (std::bad_alloc& ba){
p = tworzTablice(p-1, t);
cout<<"blad";
}
return p;
}
int main(){
cout<<f(0, 100000000)<<endl;;
cout<<"koniec"<<endl;
system("pause");
return 0;
}
【问题讨论】:
-
你为什么想知道?
-
这取决于你的内存大小,我相信。你应该使用 delete [] t;而不是删除 t;在这里。
-
将缓冲区大小加倍直到分配失败 (
t == NULL),然后对最大允许大小进行二进制搜索。 -
@harpun:你最好触摸(提交)内存,因为如果你不这样做,大多数系统都会允许你分配尽可能多的内存......
-
将受到两件事的限制:可用堆和任何架构限制。例如,后者将是一个具有 16 位整数的古老实现,因此限制为 32 或 64K 个元素。