内存管理

201 阅读2分钟

内存可以认为是办公室里的一排排收件箱,如果你想把一个东西给谁,你就可以把东西放到一个指定的收件箱里面。

每一个箱子有一个号码,代表箱子的地址,别人可以通过号码找到这个箱子。每个箱子的大小相同,通常是32位或者64位。

如果你想放一个数字进去,你可以直接放,但如果想放一个字母进去的话,比如H,我们需要先通过一个方法,找到代表这个字母的数字,比如通过UTF-8编码。我们通过编码器,把字母转换成数字,然后把数字存储起来。

                         

当我们想从盒子中取出它的时候,我们通过解码器,把数字转换成字母H。

自动的内存管理

当我们使用js的时候,我们实际不用思考内存的问题,因为js引擎已经把它抽离了出来,js引擎作为中介帮自动帮我们管理内存。

                            

js创建变量的内存处理过程

                           

js引擎通过编码器,把变量值转换成二进制

                         

js引擎在内存中找能把这个二进制数放进去的空间,这个过程叫内存分配。

                     

接着js引擎会持续跟踪这个js变量是否在程序中仍然可以访问,如果变量不再被访问,内存将会回收该变量,从而可以用来存放新值。

                    

程序跟踪变量,当变量不能访问的时候清除变量的过程称作内存回收。

像js一样,不用直接管理内存的语言可以称作内存管理语言。

这种自动管理内存的语言,能够让开发人员开发起来更简单,但是它也增加了一些开销,这些开销有时会让性能变得不可预测。

手动内存管理

对于直接操作内存的语言,比如说C语言,它可以直接向内存中存储数据也可以直接从内存中加载数据。

                                              

你需要通过malloc申请内存,然后通过free释放内存,如果不释放内存可能导致内存不足,释放内存的时机选错有可能引起bug或者安全漏洞。