【发布时间】:2016-07-11 16:07:42
【问题描述】:
所以我写了这个(实际上是想看看 realloc 是否是 O(n)-ish):
int main() {
time_t t1,t2;
char* x=malloc(sizeof(char));
char* y=x;
printf("%p %p\n",(void*)x,(void*)y);
double tot_time=0.0;
double time_r=0.0;
size_t s=2;
for(;;s++) {
t1=clock();
x=realloc(x,s*sizeof(char));
t2=clock();
if(x!=y) break;
time_r=difftime(t2,t1)/CLOCKS_PER_SEC;
//printf("%p %p %zu %f secs\n",(void*)x,(void*)y,s,time_r);
tot_time+=time_r;
}
printf("%zu elements %f secs\n",s,tot_time);
return 0;}
它以不断增加的大小(增加 1 个字节)重新分配 malloc 在开始时返回的内存,直到返回不同的地址。当这种情况发生时,它会告诉你在 malloc 返回的初始地址之后可以分配多少内存。
我的问题是:在运行 Linux(在我的情况下为 Ubuntu 14.04 64 位)的机器上,有没有办法事先知道 x 指向的内存可以扩展多少?
【问题讨论】:
-
这取决于实现。您可以阅读您正在使用的
malloc版本的源代码,甚至可以自己编写(或制作一些标准版本的私人副本),但除此之外,没有任何保证。 -
然后试着找出我的地址所属的内存块的大小?
标签: c linux dynamic-memory-allocation realloc