我目前正在使用一个例程String_concat(char *str1, char *str2)
,顾名思义,该例程将两个字符串连接在一起。为此,此例程会动态地在堆上分配内存(通过malloc()
)。但是,由于返回的字符串仅在调用例程中使用,我正在考虑直接在堆栈上分配内存(通过alloca()
),因此我将替换String_concat()
为String_concat2(char* str1, char* str2, char* dest)
将目标缓冲区(已分配在堆栈上)作为论据。所以我的问题是:是否可以String_concat2()
在其调用例程的堆栈中编写代码,还是必须强制通过进行内联__attribute__((always_inline))
?
一个函数在其调用函数的堆栈帧中写入没有问题。
例如:
void foo(int *ptr) {
*ptr = 7;
}
void bar(void) {
int value;
foo(&value);
}
在上面的代码中,foo
函数正在写入位于bar
调用它的函数的堆栈框架中的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句