好久不写博客了,汗,开始吧,呵呵。
堆是一种动态存储的结构,本质应该就是数据段中的自由存储区吧,呵呵。堆中存入数据 ,总是以2B的整数倍进行分配,地址向增加方向变动。个人理解为可以在内存中自己申请一段空间进行存储数据,呵呵,String的原理可能就是这样子的。
主要函数有malloc() free() realloc() calloc()函数,下面是个例子,在一本书上看到的,呵呵。
/*
* string.c
*/
#include < stdio.h >
#include < stdlib.h >
int main( int argc, char ** argv)
{
char * str;
if ((str = ( char * )malloc( 50 )) == NULL)
{
printf( " \n No enough memory to allocata for the string. " );
exit( 1 );
}
printf( " \n Input the string: " );
gets(str);
puts(str);
free(str);
return 0 ;
}
存个东西比放到文件中爽多了,不过要费点内存……应该是很多地方共用或者是动态的数据可以放一下,来增加效率,而且很灵活。
-----------------------------------------------------------------
四个函数的笔记:
malloc(): 用来分配内存,这个函数的返回类型是void,是不可以直接获取的,但可以先用(int*)等强制转换,而且,它分配的内存是按字节的,也就是说,一个整数就要用malloc(4)来分配;
free(): 用来释放内存,比如上面的例子中就用free(str)来释放内存了;
realloc():用来重新设置内存的大小,上面的例子中没有用到,不过借一下上面的例子,如果想调一下str占用的内存大小,用realloc(str,60)就可以了,呵呵;
calloc():这个复杂了一点,呵呵,用来分配 一个能容纳N个元素,每个元素长度为size的内存空间。如:100个长度为30的空间,calloc(100,30);
-------------------------------------------------------------------
淡定,洗洗早点睡了,嘿嘿 。