当前位置:首页 > 内存 > 正文

内存分配算法(freertos内存分配算法)

  • 内存
  • 2024-05-31 02:33:17
  • 2346

一、win10的虚拟内存设置大小多少最佳?右键单击计算机或此计算机,然后选择左侧的属性/高级系统选项/性能设置/高级/虚拟内存选项选择更改/自动允许/单击自定义大小/添加到起始大小和最大值,见下文。添加这些后,单击“选项”,然后单击“确定”。
与内存大小相关的常规设置:
建议将初始大小和最大大小都设置为物理内存的1-2倍,例如2G。设置为4096MB(2G内存2倍),3G设置为4608MB(3G内存1.5倍),4G内存先设置为4096MB(1倍4G不够),自动6-8G内存或更大。这是一个问题
如果是6-8G或者更大的话,最大功率设置为物理内存的1倍,或者设置小一点,第一个大小设置为一半,因为比较大。物理内存、虚拟内存无需设置太大。
二、堆内存分配

malloc实现:为了避免每次都进行系统调用来分配内存(系统调用很耗时),运行时库通过系统调用一次分配大块内存,然后零售给程序。

可以使用两个系统调用来分配堆内存:

数据段和共享库之间的区域可以用来分配堆空间。从Linux2.6开始,共享库的加载地址放在0xbf000000处,大约会占用2.9G的空间,但你仍然受到内存大小+虚拟内存空间大小的限制。

堆分配算法:

空区域通过链表链接在一起。分配时,它首先找到一个可以容纳请求大小的空闲块,然后将该块分割成多个块。两部分,一部分是程序请求的部分区域的剩余空间,剩余空间被放回到链表中。如果剩余空间为0,则从链表中删除。

分配给程序的内存块通常会增加4个字节来存储内存块大小,以便于释放。

堆内存被分成大小相等的块。当用户申请内存时,所分配区域中的一个块是引导块,其余块分配给用户。它被称为身体。块的状态是head/body/free,可以用2位来表示。

相应的位图如下所示:

缺点是分配必须是块大小的整数倍。这很容易被浪费。

小于64字节的数据采用堆分配算法对象池,大于512字节的数据采用最佳自适应算法,大于512字节的数据采用最佳折中策略使用64到512字节之间。