即使有足够的内存,VXWorks内存分配失败也是如此



我是VXWorks的新手,我正在构建一个RTP应用程序,该应用程序需要动态分配一些内存。我已经配置了内存的内存大小为750MB。

我是在程序开头的大小为32MB的10个数字中分配内存,但是在第5或6块分配后,我在控制台上获得了消息memPartAlloc: block too big 15912260 bytes (0x10 aligned) in partition 0xe004608,我将获得分配失败。

如果有足够的内存,内存分配将如何失败?我认为内存不足以分配以使分配在我程序的开头,并且根据memShow()的输出,确实有足够的免费内存来满足请求。

如果记忆确实由于任何奇怪的原因而破碎了,是否有某种方法可以压缩自由空间并继续在VXWorks中?

这是一个古老的问题,因此此答案现在可能是毫无意义的,并且在一定程度上基于基于问题中的有限信息的推测。

虽然内核可能配置为支持750MB,但这将是可用的总内存。OS图像将使用其中一些,尽管我们不会期望太多,并且可以假设至少应该使用700MB。

将使用一些额外的内存来为每个任务提供堆栈 - 该应用程序的依赖程度是多少,正如Taskspawn中指定的那样。您可以检查一下,但是再次,不太可能产生重大差异。

让我们很慷慨,并假设您实际上只有650MB。从理论上讲,这应该是足够的。

但是我们有一个错误:

memPartAlloc: block too big 15912260 bytes (0x10 aligned) in partition 0xe004608

会发生什么?这是什么意思?此错误告诉您,由于请求太大,内存分配器无法分配内存。有趣的是,该请求是15912260,不是32MB,实际上是超过15MB的阴影。因此,值得检查您实际要求的内容。

其次,此错误消息来自memPartAlloc。您是否使用malloc()memPartAlloc()分配内存?区别很重要,因为Malloc将从系统内存分区分配内存,而Mempartalloc将存储器从用户指定的和创建的分区分配。

如果您使用的是MEMPARTALLOC,请确保您是从正确的分区分配内存,并且已经使用足够的内存来实现该请求。

编辑:

看来这是RTP,您还应确认RTP分配了足够大的堆。这是通过环境变量指定的,如本答案所述。

相关内容

  • 没有找到相关文章

最新更新