我正在研究 USB 通信。这里每次来自主机的数据大小都不同。为了避免主机出现这种情况,它会在发送数据之前发送数据的大小,因此我需要分配主机发送的大小的缓冲区。
来自主机的数据是“5”,它是一个字符串,我需要分配大小为 5 的缓冲区。 例如:rec_buff[5]。从主机读取尺寸后。
每次大小变化时,我如何使用 C 代码片段来做到这一点。我不知道该怎么做。我以前从事java工作,我是C新手。
我需要在不使用动态内存分配的情况下完成此操作。
任何帮助将不胜感激。提前致谢。
最佳答案
我假设您不希望使用可变大小块进行内存分配,因为您不希望内存碎片。那么您要寻找的是内存池(固定 block 大小)或固定大小数组(在 .bss 部分中预先分配的数组)。
您可以看看 API for memory pool in Zephyr RTOS 是如何实现的看起来像并检查源代码以获取实现细节。还有question about implementing own memory pool .
该系统的一个重要方面是处理输入超出缓冲区中最大可用空间时发生的情况。你可以例如实现某种状态机并解析 block 中的输入或简单地中止。
关于c - 从字符串读取大小后分配大小为 'n' 的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020172/