子例程在其调用例程的堆栈中写入是否安全?

蒂姆托

我目前正在使用一个例程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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章