Microchip
直播中

李傈吏

7年用户 190经验值
私信 关注
[问答]

可变大小缓冲区的内存分配技术

我有一个FIFO类,我已经在几个项目中使用。我一直定义了一个结构,它具有固定大小的缓冲区和头和尾的指针。我希望能够通过在不同的结构中分配不同大小的缓冲区来提高这个类的通用性。例如,用于Telnet套接字的FIFO可能需要不同于RS232的FIFO。我知道实现此目的的唯一方法是两个选项之一:1)在结构外部定义缓冲区,然后将缓冲区地址存储在结构中。2)使用malloc在初始化函数中动态分配缓冲区。实际上,这与#1相同,但是可以在单个函数调用中自动完成,其中#1要求用户正确地完成多个步骤。如果可能的话,我试着远离malloc。在这种情况下,我认为使用它不会有坏处,因为所有这些缓冲区只会在系统初始化期间建立,并且不会再次改变。一旦程序被验证,它每次都会以相同的方式运行。另一方面,在应用程序开始运行之后,没有任何东西可以阻止用户定义更多的FIFO。有没有更好的方法来实现我的目标?任何想法都将不胜感激!谢谢,John Vickers

回帖(4)

李兆峰

2020-4-9 18:09:06
很多年前,我在Windows中创建了一个类似的C++类:确实存在这样的问题/请求。因为在引导时创建它们“ALL”,即使在PIC上,MALOC也可能是个好主意:否则,另一种方法将在名称中具有不同的类,后缀有不同的类,具有不同大小的缓冲器。或者保留一大块RAM,创建一些“私有”malloc(人们在嵌入式世界有时会这样做),确保它们永远不会碎片。
举报

毕凯

2020-4-9 18:17:45
我的处理方法是创建一个C++缓冲类,它是在数据类型和容量上模板化的。否则,如果您想避免MalCube(),您的第一个选项并不坏。
举报

鲁瑶

2020-4-9 18:29:49
C++的方法很有趣,但是我只想把代码保存在C中,谢谢输入!维克斯
举报

李天竹

2020-4-9 18:40:09
创建一个所需大小的全局字符数组,然后将其映射到指向数据结构的指针。这将给您一个指向内存的指针,而不使用MalCube()。当然,你不能免费():
举报

更多回帖

发帖
×
20
完善资料,
赚取积分