g***l 发帖数: 2753 | 1 就是先在系统内存中分配一块大的内存,比如说10M,然后所有的memory malloc/
calloc/free都是在这个内存块里面操作。这样可以减少memory fragmentation.
谢谢。 |
d****n 发帖数: 1637 | |
t****t 发帖数: 6806 | 3 除了这么干, 还能怎么干?
当然, 这样说不完全对, 比如说glibc对于大内存是用mmap分配的. 但是对于小内存,
本来就是这么干的啊, 除了glibc是逐渐增长的"大"内存, 但是就算逐渐增长, 内存也
是连续的.
【在 g***l 的大作中提到】 : 就是先在系统内存中分配一块大的内存,比如说10M,然后所有的memory malloc/ : calloc/free都是在这个内存块里面操作。这样可以减少memory fragmentation. : 谢谢。
|
g***l 发帖数: 2753 | 4 从系统的角度是这样的,但是如果系统中有多个子系统需要很多次的频繁的malloc/
free的话,这个碎片化的问题还是要考虑的吧?还有个问题俺们的系统上没有glibc啊。
【在 t****t 的大作中提到】 : 除了这么干, 还能怎么干? : 当然, 这样说不完全对, 比如说glibc对于大内存是用mmap分配的. 但是对于小内存, : 本来就是这么干的啊, 除了glibc是逐渐增长的"大"内存, 但是就算逐渐增长, 内存也 : 是连续的.
|
t****t 发帖数: 6806 | 5 不管是不是glibc, malloc/free总是从一块连续大内存池里拿的, 可能算法有好有坏,
但是通常来说不需要用户考虑这个.
如果你想说的是multiple heap, 那是另外一回事. 但是正常情况下一般人不需要这个.
如果是多线程, 那mutex的开销可能更大一些.
啊。
【在 g***l 的大作中提到】 : 从系统的角度是这样的,但是如果系统中有多个子系统需要很多次的频繁的malloc/ : free的话,这个碎片化的问题还是要考虑的吧?还有个问题俺们的系统上没有glibc啊。
|
g***l 发帖数: 2753 | 6 主要是俺们这个有点特殊,需要单独划出一块memory给单独的一个子系统用。这个子系
统消耗的内存大小是有限制的。
,
个.
【在 t****t 的大作中提到】 : 不管是不是glibc, malloc/free总是从一块连续大内存池里拿的, 可能算法有好有坏, : 但是通常来说不需要用户考虑这个. : 如果你想说的是multiple heap, 那是另外一回事. 但是正常情况下一般人不需要这个. : 如果是多线程, 那mutex的开销可能更大一些. : : 啊。
|
t****t 发帖数: 6806 | 7 limited memory consumption alone is not the reason of multiple heap. only
when you know the memory fragmentation limits your performance.
【在 g***l 的大作中提到】 : 主要是俺们这个有点特殊,需要单独划出一块memory给单独的一个子系统用。这个子系 : 统消耗的内存大小是有限制的。 : : , : 个.
|
H****r 发帖数: 2801 | 8 placement new?
【在 g***l 的大作中提到】 : 就是先在系统内存中分配一块大的内存,比如说10M,然后所有的memory malloc/ : calloc/free都是在这个内存块里面操作。这样可以减少memory fragmentation. : 谢谢。
|
d****n 发帖数: 1637 | 9 根他们说那些都没用,真正自己去实现一个也不难。
看看 K&R C 里面有个babe版本的,你自己拓展也用不了多长时间。
根他们扯一大堆也是浪费时间。肯定要根你瞎掰一通。啥用也没有。
【在 g***l 的大作中提到】 : 主要是俺们这个有点特殊,需要单独划出一块memory给单独的一个子系统用。这个子系 : 统消耗的内存大小是有限制的。 : : , : 个.
|
g***l 发帖数: 2753 | 10 对头!
【在 d****n 的大作中提到】 : 根他们说那些都没用,真正自己去实现一个也不难。 : 看看 K&R C 里面有个babe版本的,你自己拓展也用不了多长时间。 : 根他们扯一大堆也是浪费时间。肯定要根你瞎掰一通。啥用也没有。
|
|
|
d****n 发帖数: 1637 | 11 我给你那个连接就是 K&R C里面的扩展,如果你能看明白,都不用修改。
【在 g***l 的大作中提到】 : 对头!
|
g***l 发帖数: 2753 | 12 非常感谢!
【在 d****n 的大作中提到】 : 我给你那个连接就是 K&R C里面的扩展,如果你能看明白,都不用修改。
|
a9 发帖数: 21638 | 13 你这10M里面,不照样还是有碎片
【在 g***l 的大作中提到】 : 主要是俺们这个有点特殊,需要单独划出一块memory给单独的一个子系统用。这个子系 : 统消耗的内存大小是有限制的。 : : , : 个.
|
b***i 发帖数: 3043 | 14 PC?
CPU支持保护模式,虚拟内存是连续的,分配4k是连续的就行了。
【在 g***l 的大作中提到】 : 就是先在系统内存中分配一块大的内存,比如说10M,然后所有的memory malloc/ : calloc/free都是在这个内存块里面操作。这样可以减少memory fragmentation. : 谢谢。
|
L***n 发帖数: 6727 | 15 也许可以考虑memory pool 比如obstack,这篇文章可能对你有帮助,特别是后面那个
表。
http://www.ibm.com/developerworks/linux/library/l-memory/
【在 g***l 的大作中提到】 : 主要是俺们这个有点特殊,需要单独划出一块memory给单独的一个子系统用。这个子系 : 统消耗的内存大小是有限制的。 : : , : 个.
|