试图删除 malloc 的使用 - 这里有替代方案吗?
Trying to remove the use of malloc - is there an alternative here?
对含糊的标题表示歉意。
我目前正在重构团队前任开发人员编写的一些代码。我们目前正在使用 malloc 在要写入的内存中分配 X space。
char* foo = NULL;
foo = (char*)malloc((uint32_t)fSize + 1);
bar = (int64_t)fread(foo, (uint32_t)fSize, 1, fd);
foo[fSize] = '[=10=]';
其中 fSize 是我们正在读取的 .sql 文件的大小
man fread 告诉我它将从 fd(流)读取 1 个大小为 fSize 的项目并写入 foo 指向的内存位置。
本质上,我试图找到一种方法来保持我们现在拥有的相同功能,而无需使用 malloc。不幸的是,我在内存分配等方面没有太多经验,这是我第一次遇到它,所以非常感谢任何帮助!
如果您处理的是简单类型 (char
),您可以轻松地在堆栈上分配内存并在那里读取:
char foo[fSize+1]; // '+1' is not required, but why not? =)
bar = (int64_t)fread( foo, (uint32_t)fSize, 1, fd);
对于更复杂的结构,您可能希望先声明它们然后用于内存分配,在堆栈上分配的好处是当函数结束时会自动处理释放,您不需要不必显式调用 free()
。
对含糊的标题表示歉意。
我目前正在重构团队前任开发人员编写的一些代码。我们目前正在使用 malloc 在要写入的内存中分配 X space。
char* foo = NULL;
foo = (char*)malloc((uint32_t)fSize + 1);
bar = (int64_t)fread(foo, (uint32_t)fSize, 1, fd);
foo[fSize] = '[=10=]';
其中 fSize 是我们正在读取的 .sql 文件的大小
man fread 告诉我它将从 fd(流)读取 1 个大小为 fSize 的项目并写入 foo 指向的内存位置。
本质上,我试图找到一种方法来保持我们现在拥有的相同功能,而无需使用 malloc。不幸的是,我在内存分配等方面没有太多经验,这是我第一次遇到它,所以非常感谢任何帮助!
如果您处理的是简单类型 (char
),您可以轻松地在堆栈上分配内存并在那里读取:
char foo[fSize+1]; // '+1' is not required, but why not? =)
bar = (int64_t)fread( foo, (uint32_t)fSize, 1, fd);
对于更复杂的结构,您可能希望先声明它们然后用于内存分配,在堆栈上分配的好处是当函数结束时会自动处理释放,您不需要不必显式调用 free()
。