gpt4 book ai didi

c - malloc 调用的静态替换

转载 作者:行者123 更新时间:2023-11-30 14:33:24 26 4
gpt4 key购买 nike

我正在开发一个裸机应用程序。我希望为我的应用程序采用 U-Boot 源代码。我想替换 U-Boot 中的以下 malloc 调用来静态分配内存 -

struct foo *ptr = malloc(sizeof(struct foo));

根据我的理解,这一行仅尝试为该结构的一个实例分配足够的空间,并将该空间的地址存储在 ptr 中。

因此,我尝试用以下几行替换它 -

struct foo *ptr;
int struct_sz = sizeof(struct foo);
char buf[struct_sz];
ptr = &buf; //also tried ptr = buf;

但是,这会导致堆栈缓冲区溢出,调用堆栈中函数的返回地址被垃圾覆盖。

如何在这里静态分配内存而不是使用 malloc?

最佳答案

您正在做的是分配一个字符数组,然后让一个指向结构的指针指向同一内存。

虽然这是可能的,但您可能会遇到内存对齐问题。该结构可能需要从特定位置开始。 (例如,32 位 int 需要从 4 的倍数的地址开始)。字符数组可以从任何位置开始。

更简单的方法是声明一个 struct foo 变量并使用指向该变量的指针。该变量需要是全局变量或静态变量,以便在函数作用域完成后它仍然存在。

static struct foo var;
struct foo *ptr = &var;

要分配许多结构,您需要一个静态结构数组

static struct arr[5];
struct foo *ptr = arr;

如果您分配内存并且不经常释放它,则此方法将起作用。如果您有许多 mallocfree,您应该考虑编写自己的分配器,它将模仿 malloc 的功能

关于c - malloc 调用的静态替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350278/

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