编程语言应用

首页 » 常识 » 常识 » c语言中malloc申请的空间和直接定义
TUhjnbcbe - 2024/6/6 18:22:00

有很大区别。根据以前的编程经验,要点有三点:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。以下分别说明。直接定义变量与malloc定义变量的编程含义;malloc事先分配好了内存空间。在c语言中,malloc函数原型为void*malloc(unsignedintslong),其作用是在内存的动态存储区中分配一个长度为slong的连续空间。次函数的返回值是分配区域的起始地址,如:char*p;p=malloc();//空间不够指针为null。如果用数组定义:charp[],表示的是声明了一个数组,此数组的大小个字节。但是,请注意要点:系统这时并没有为其分配内存。

只是在使用时才分配。动态内存申请与释放,确保内存的正确使用。比如,我们在控制系统中,经常要对用户输入的一段零件程序、一个图像文件进行解释、识别,那么首先要做的,是将此文件装入内存中,执行完成后,立即释放。这就需要malloc及free了。沿用上面的定义:fread(p,,1,fp);fclose(fp);free(p);要点是随时申请,用完释放。如果不用malloc,直接定义,在大型软件开发中,一般会导致程序执行异常,出现不可控的结果。在前两点,都用到charp[]及malloc()。很多初学者,为了省事,喜欢用charp[]这样的定义。

这样最容易出现bug,尤其是当p指针越大时,出现问题几率越大。这是因为,对于p[]这种写法,如果系统没有足够多的内存使用,那么p[lp]所指向的,可能就是一个其它变量了,或者说p[lp]把其它变量空间覆盖了。在VC、VS中,情况要稍好,因为管理的内存足够大。总结:在大型软件开发中,如果不用malloc,直接定义数组,一般会导致程序执行异常,出现不可控的结果。对于超过字节的数组空间,建议用malloc/free,以确保数组变量的绝对正确;小的空间,直接用数组定义即可。

上古时代的程序是穿孔纸带,那时候计算机主要为了进行科学计算,都比较小,随便写。随着技术进步,需求变化,程序越来越大,此时初选汇编,但也仅仅是指令的助记符而已,整个规模也不大,几个人就搞定了。几万行规模。怎么整也还行。再往后规模越来越大,硬件种类还越来越多,需求还不断变化。此时该怎么组织,怎么分工,怎么设计,怎么理解,怎么适应变化,怎么提高生产率,怎么提升软件质量,那就是采用分治法,从大到小划分,分成的一个个最小的模块就叫函数,相关函数放到一起就是文件,再大的就是工程。函数可以提供最基本的复用,库则打包提供一堆函数。函数该如何互相调用,总得有个规章制度吧,函数的层层调用,后进先出模式就是栈(互为依托)。可以把栈设计的很大,但函数在退出时申请的空间会消失,上层想用就用不了了,另外当一个东西的层次超过10层,你觉着好理解吗?所以搞那么大也没啥用,剩余的内存空间怎么管理,那就用函数吧

1
查看完整版本: c语言中malloc申请的空间和直接定义