Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Memory allocation in C

Name: Anonymous 2011-09-06 9:12

I'm confused about how memory allocation works in C.
Consider the following code.

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a[5];
    int *b;
    b = malloc(sizeof(char) * 5);
    printf("a = %lu b = %lu", sizeof(a), sizeof(b));
    free (b);
    return 0;
}


It returns sizeof(a) to be the actual size of the array a that I allocated. I thought C didn't keep any record of the size of arrays which was the reason why strings have to be null terminated so what's up with that?
On the other hand sizeof(b) returns just the size of the pointer not the size of the array. When I do free(b) how does it know how much memory to deallocate?

Name: Anonymous 2011-09-06 11:19

>>1
sizeof(a) gets the size of the whole array because the compiler initialized the array with 5 integers - it "knows" how big 'a' is. sizeof(b) gets the size of the pointer because the compiler doesn't know that 'b' is an array. The compiler doesn't know anything about the malloc() function, that's all down to the C library implementation you use.

malloc(), free() and realloc() know how big b is either because the C library implementation stores it somewhere or because the operating system keeps track of a process' allocated memory. I don't know which but I think it's the latter.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List