ich diese So schrieb (Eigentlich versuchen zu sehen, ob realloc war O (n) -ish oder nicht):Verfügbare Speicher nach Adresse von malloc zurück
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;}
, die mit einer ständig Inkrementieren Größe reallocs (von 1 byte) der von malloc am Anfang zurückgegebene Speicher, bis eine andere Adresse zurückgegeben wird. Wenn so etwas passiert, wird es Ihnen sagen, wie viel Speicher nach der von malloc zurückgegebenen Anfangsadresse zugewiesen werden konnte.
Meine Frage ist: Auf einer Maschine mit Linux (in meinem Fall Ubuntu 14.04 64bits) gibt es eine Möglichkeit, vor der Hand zu wissen, wie viel kann der Speicher, auf den x zeigt, expandieren?
Dies ist implementierungsabhängig. Sie könnten den Quellcode für die von Ihnen verwendete Version von 'malloc' lesen oder sogar Ihre eigenen schreiben (oder eine private Kopie einer Standardversion erstellen), aber ansonsten gibt es keine Garantien. –
Und versuchen Sie, über die Größe des Speicherblocks zu finden, zu dem meine Adresse gehört? – CrossNox