Так что я написал это (на самом деле пытается увидеть, если перераспределить была О (п) -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;}
Какой reallocs с постоянно увеличивающимся размером (от 1 байт) память, возвращаемая malloc в начале, пока не будет возвращен другой адрес. Когда это произойдет, он расскажет вам, сколько памяти было возможно выделить после этого начального адреса, возвращаемого malloc.
Мой вопрос: на машине под управлением Linux (в моем случае Ubuntu 14.04 64bits) есть ли способ узнать перед собой, сколько памяти, на которую указывает x, расширяется?
Это зависит от реализации. Вы можете прочитать исходный код для версии «malloc», которую используете, или даже написать свой собственный (или сделать частную копию некоторой стандартной версии), но кроме этого нет гарантий. –
И попытаться найти размер блока памяти, к которому принадлежит мой адрес? – CrossNox