![]() |
1
3
标准的技术是仅将大小增加2倍,并且仅在有效内存使用少于四分之一时将其缩小。 这样,您就可以确保使用的内存永远不会超过O(您需要的内存),并且还可以证明堆栈是按固定时间摊销的。 (用这种方式看:你为每一个进入或退出堆栈的项目支付三美分。其中两个将在下次复制时使用。) |
![]() |
2
0
绝对不要一次增长和收缩4个字节。您的堆将变得非常零碎,您将在分配器中花费太多时间。即使在内存有限的体系结构中,您也不希望像这样对内存进行微管理。 选择“页面大小”,并按该值递增。建议将尺寸加倍是很常见的,但我不知道为什么会这样。您可能更了解如何使用堆栈来了解如何最好地增加大小。 |
![]() |
3
0
在流行的库中实现的几乎每一个可变大小的结构都会做一些小的优化,以避免总是重新分配。记住,它通常必须复制数据以使其更大。 通常它的生长量更大。一个常见的策略是将规模扩大一倍,直到达到某个限制,然后在那里以固定的数量增长。对于收缩,不要担心调整大小,直到它浪费一半以上的大小。 但是,一些realloc()实现已经在幕后为您实现了这一点。唉,我怀疑你的“晦涩语言”是不是…… |
|
pickle323 · C编程:现代方法-第10章项目6-困惑 6 年前 |
![]() |
Gameatro · 为什么malloc在函数内部调用时返回空指针? 6 年前 |
![]() |
E. Peracchia · F#函数调用工作不正常 7 年前 |
![]() |
Jorge Zazueta · 汉诺塔C++的堆栈实现 7 年前 |
|
adamcasey · 缓冲区溢出“攻击”中的操作序列 7 年前 |