gpt4 book ai didi

c - 是否可以在 C 中编写类似 _alloca 的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:54 24 4
gpt4 key购买 nike

函数_alloca(alloca)在栈上分配内存,不需要“free”。

是否可以在 C 中编写在堆栈上分配的函数?

另一种表达方式:_alloca 做到了!

或者由于其他原因,这在 C 中是不可能的,包括:1)功能是用ASM写的2) C运行时库的一个特点。

我对编写类似 alloca 的函数感兴趣的原因如下:

void func (const char *path, const char* filename)
{
char s[1024];
snprintf (s, sizeof(s), "%s/%s", path, filename);
}

但我更愿意:

void func (const char *path, const char* filename)
{
char *s = alloca_sprintf ("%s/%s", path, filename);

// ... No need to free.
}

在此先感谢熟悉该主题的任何人。 asnprintf 是对使用固定大小缓冲区的改进,但仍需要清理。

最佳答案

如果您的目标只是最小化占用的堆栈空间,那么您只需要 C99 VLA:

void func (const char *path, const char *filename)
{
char s[strlen(path) + strlen(filename) + 2]; // +2 for '/' and null terminator
sprintf(s, "%s/%s", path, filename);
...
}

这与您从 alloca 获得的功能相同,而且是标准的!

关于c - 是否可以在 C 中编写类似 _alloca 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17056986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com