realloc and malloc functions
Look at the code:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p;
p = malloc(6);
p = realloc(p, 10);
if (p == NULL)
{
printf("error");
exit(1);
}
}
Take this example for the code, suppose the total memory is 10 bytes and 2 bytes is used by the declaration of pointer to type int and ohter 6 bytes by malloc function the remaining 2 bytes is occupied by other programs, now when i run realloc function to extend the memory that pointer is pointing to, it will search for 10 bytes in memory and when it is not available it allocates 10 bytes of memory from heap area and copies contents of malloc and paste it in new allocated memory area in heap area and then delete the memory stored in malloc right?
Does realloc() return a NULL pointer because the memory is not available? No right!? It does go to heap area for the memory allocation right? It does not return a NULL pointer right?
Correct -- if realloc
can't resize the memory block you pass in, it makes a new one, copies the data, and deallocates the old one.
HOWEVER:
malloc
implementations do not typically operate on a byte granularity. Most of the ones I've seen round everything up to the nearest 16 bytes, since it makes accounting easier, and many users will need that alignment anyway. In your case, this would end up making the realloc
a no-op, since both sizes round up to 16 bytes.
In most common multitasking operating systems, the only memory accessible to your application is its own -- other applications' memory will never get in your way. Memory allocated by libraries or other threads might, though.
As stated at the specification for realloc:
If the new size of the memory object would require movement of the object, the space for the previous instantiation of the object is freed.
链接地址: http://www.djcxy.com/p/28458.html上一篇: 施放为结构指针+ Malloc
下一篇: realloc和malloc函数