小内存算法中会对用户申请内存有个最小值限定,其值由MIN_SIZE_ALIGNED决定。带来的坏处很明显,如果用户大量申请小于MIN_SIZE_ALIGNED的内存时,会造成很多内存浪费。那么当初为什么要限定最小值了,是为了一定程度上减少内存碎片概率?
MIN_SIZE_ALIGNED值也不大,即使没有这个,每个内存块也要占用至少十几字节以上内存。
所以
用户大量申请小于MIN_SIZE_ALIGNED的内存时
根本原因是大量申请小内存,而不是MIN_SIZE_ALIGNED的问题。
另外为了应用对齐,建议内存分配算法中,至少要把内存地址对齐到 RT_ALIGN_SIZE,
至少是4,有浮点运算时至少要8。
如果有cache,至少对齐到cache_line,如ARM一般是32字节。现在用 risc-v 玄铁C906,要对齐到64字节了。
看这个PR https://github.com/RT-Thread/rt-thread/pull/5366
感谢解答!
“用户大量申请小于MIN_SIZE_ALIGNED的内存时”只是举个示例可能带来的不好之处,如果再考虑到数据头占用的内存,用户使用时本身自己就要考虑清楚。
很好奇MIN_SIZE_ALIGNED这个限定是基于什么考虑的,代码中是按64bitCPU区分默认该值为12或者24.这个值有具体含义还是测试依据吗?