Linux 内存管理:分配、操作与锁定
1. 内存分配机制
1.1 alloca( ) 函数
alloca( ) 函数用于在栈上分配内存。不过,在函数调用的参数中使用 alloca( ) 分配的内存是不可取的,因为分配的内存会位于为函数参数保留的栈空间中间。例如:
/* DO NOT DO THIS! */
ret = foo (x, alloca (10));
alloca( ) 的历史较为复杂。在许多系统中,它的表现不佳,甚至会导致未定义行为。在栈空间较小且固定的系统中,使用 alloca( ) 很容易使栈溢出,从而导致程序崩溃。在其他一些系统中, alloca( ) 甚至不存在。
然而,在 Linux 系统中, alloca( ) 是一个非常有用但未被充分利用的工具。它的性能非常出色,在许多架构中,通过 alloca( ) 进行内存分配仅仅是增加栈指针,其性能远超 malloc( ) 。对于特定于 Linux 的代码中的小内存分配, alloca( ) 可以显著提高性能。
常见的 alloca( ) 用法是临时复制字符串,示例如下:
/* we want to duplica
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



