关于我写的strcpy的延伸出的问题——程序运行时内存的分配

     上篇博文上我自己写了一个strcpy,只是简单的解决了标准库函数strcpy由于dest目的字符串大小不足以存储下需要复制的字符串而产生的越界问题, 在我的strcpy中dest的字符串大小是在函数里分配的,分配的大小根据需要复制的字符串大小而定,这样就不会产生越界问题了。

      但我只考虑了分配内存给dest字符串,却未考虑释放自己分配给dest的内存。这里也就是在程序中动态的分配内存,需要自己释放分配的内存空间,不然要等到程序结束由系统来回收这些内存。有时程序结束之前我已经不需要使用这块内存了,这样就会造成内存不必要的浪费,如果不需要使用动态分配的内存了,我们应手动的释放它。

 

      在程序运行时内存的分配方式:(代码段内存分配不做分析)

 

      (1)静态存储区域分配。内存在程序编译的时候或者在操作系统初始化的时候就已经分配好,这块内存在程序的整个运行期间都存在,而且其大小不会改变,也不会被重新分配。例如全局变量,static变量等。


  (2)栈上的内存分配。栈是系统数据结构,对于进程/线程是唯一的,它的分配与释放由操作系统来维护,不需要开发者来管理。
。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储单元会被自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,不同的操作系统对栈都有一定的限制。


  (3)堆上的内存分配,亦称动态内存分配。程序在运行的期间用malloc申请的内存,这部分内存由程序员自己负责管理,其生存期由开发者决定:在何时分配,分配多少,并在何时用free来释放该内存。这是唯一可以由开发者参与管理的内存。使用的好坏直接决定系统的性能和稳定。

 

       所以应该为我写的 strcpy 添加一个释放内存的函数。代码如下:

 

       int free_dest(char **p)

       {

               if(p == NULL)   return -1;

 

               free(*p);

 

               *p = NULL;

 

               return 0;

       }

 

        以上是我个人的理解,对内存分配的总结是我在网上摘录的,若有什么不足或不对的地方欢迎指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值