我正在尝试将 C 库移植到嵌入式平台 (Xilinx Microblaze),并且该库包含对 malloc()、alloc()、calloc() 和 free() 的一些调用。
这些函数调用需要引入嵌入式平台的额外库,并且会使得程序代码更大。
从 C 程序中删除动态分配并仅使用静态分配的最佳步骤是什么。我应该找出哪些事实,我应该进行哪些计算?欢迎任何提示。
malloc 调用示例:
decoder->sync = malloc(sizeof(*decoder->sync));
if (decoder->sync == 0)
return -1;
非常感谢,
罗什
最佳答案
将动态内存分配(运行时)转换为静态分配(编译时)时需要处理两个问题。首先,编译器显然必须知道在编译时分配多少内存。在上面的示例中,看起来任何decoder->sync 指向的大小都是恒定的,因此应该不成问题。但是,如果您为可变长度数据序列的字节数组分配内存,则会遇到问题。您要么必须为最大可能的数据长度分配足够的空间,要么将数据分成块,或者...希望您能理解。
另一个问题是堆与堆栈。所有动态内存分配都来自堆。非全局静态内存分配来自堆栈,在嵌入式环境中堆栈可能非常小。这意味着如果内存分配是中到大,您可能需要将其设为全局或“静态”(局部范围的静态变量也从堆中出来)以避免堆栈溢出,即使变量不会以其他方式需要是全局性的。
希望这是有道理的。
关于c - 删除动态内存分配 - 从嵌入式 C 程序中删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6201980/