Ros*_*osh 4 c memory porting allocation dynamic
我正在尝试将C库移植到嵌入式平台(Xilinx Microblaze),并且该库包含对malloc(),alloc(),calloc()和free()的一些调用.
这些函数调用要求将其他库导入嵌入式平台,并使程序代码更大.
从C程序中删除动态分配的最佳步骤是什么,并且仅使用静态分配.我应该找到什么事实,我应该做什么计算?欢迎任何提示.
malloc调用的示例:
decoder->sync = malloc(sizeof(*decoder->sync));
if (decoder->sync == 0)
return -1;
Run Code Online (Sandbox Code Playgroud)
非常感谢,
罗什
将动态内存分配(运行时)转换为静态分配(编译时)时,有两个问题需要处理.首先,编译器显然必须知道在编译时要分配多少内存.在上面的例子中,它看起来像解码器 - >同步点是一个恒定的大小,所以它不应该是一个问题.但是,如果为可变长度数据序列的字节数组分配内存,则会出现问题.你要么必须为最大可能的数据长度分配足够的数据,要么将数据分成几个块,或者......希望你能得到这个想法.
另一个问题是堆与堆栈.所有动态内存分配都来自堆.非全局静态内存分配来自堆栈,堆栈在嵌入式环境中可能非常小.这意味着如果内存分配从中到大,您可能需要使其全局或"静态"(本地范围的静态变量也会从堆中出来)以避免堆栈溢出,即使该变量不会需要全球化.
希望这是有道理的.