Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/debugging/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 在nano libc中使用malloc调试信息?_Debugging_Arm_Malloc_Gnu_Newlib - Fatal编程技术网

Debugging 在nano libc中使用malloc调试信息?

Debugging 在nano libc中使用malloc调试信息?,debugging,arm,malloc,gnu,newlib,Debugging,Arm,Malloc,Gnu,Newlib,我正在使用gnu arm工具链,在我的程序中,我多次调用malloc。对malloc的调用工作正常,直到某一点失败为止。 当我检查空闲堆大小和空闲堆栈时,它显示有足够的空间来分配。 问题是我无法从nano-lib调试malloc,以查看它在哪里卡住了,因为nano-lib是在没有调试信息的情况下构建的。 有没有人可以给我提供或重定向到关于如何用调试信息重建GNU ARM库的有用信息 谢谢 堆可能是碎片。所以你可以有一个足够大的“自由大小”,但没有足够大的块。您确定“空闲堆大小”不是一堆小数据块吗

我正在使用gnu arm工具链,在我的程序中,我多次调用malloc。对malloc的调用工作正常,直到某一点失败为止。 当我检查空闲堆大小和空闲堆栈时,它显示有足够的空间来分配。 问题是我无法从nano-lib调试malloc,以查看它在哪里卡住了,因为nano-lib是在没有调试信息的情况下构建的。 有没有人可以给我提供或重定向到关于如何用调试信息重建GNU ARM库的有用信息


谢谢

堆可能是碎片。所以你可以有一个足够大的“自由大小”,但没有足够大的块。您确定“空闲堆大小”不是一堆小数据块吗?试着分配一些较小的块。我认为这是堆碎片问题,因为我知道堆中有足够的空闲空间来malloc较小的块。但是如何强制堆管理连接所有小的空闲块,以便在nano lib中获得大的块呢?dlmalloc已经非常擅长管理小的分配。您需要查看您的应用程序,并尝试使用“slab”或“objstack”分配。也就是说,分配一大块并使用您自己的分配器来管理空间;希望物体大小相等。此外,您可以“重新定位”对象,然后可以压缩空间。如果它们都是相等的,那么就没有必要了,因为每一个都可以放入任何空闲的插槽中。代码多次调用小的分配,并且没有根据需要立即释放所有这些小的块。所以,这导致了碎片问题,特别是当我想要分配大的块时。您谈到了slab或objstack以及用于管理空间的分配器。一些提示?还是链接?我使用并拥有和。对于Slab上的Wikipedia,它消除了分配和取消分配造成的碎片。听起来你可能会从中受益。你需要一份工作;slab就是这个加上它预先初始化内存。堆可能会被碎片化。所以你可以有一个足够大的“自由大小”,但没有足够大的块。您确定“空闲堆大小”不是一堆小数据块吗?试着分配一些较小的块。我认为这是堆碎片问题,因为我知道堆中有足够的空闲空间来malloc较小的块。但是如何强制堆管理连接所有小的空闲块,以便在nano lib中获得大的块呢?dlmalloc已经非常擅长管理小的分配。您需要查看您的应用程序,并尝试使用“slab”或“objstack”分配。也就是说,分配一大块并使用您自己的分配器来管理空间;希望物体大小相等。此外,您可以“重新定位”对象,然后可以压缩空间。如果它们都是相等的,那么就没有必要了,因为每一个都可以放入任何空闲的插槽中。代码多次调用小的分配,并且没有根据需要立即释放所有这些小的块。所以,这导致了碎片问题,特别是当我想要分配大的块时。您谈到了slab或objstack以及用于管理空间的分配器。一些提示?还是链接?我使用并拥有和。对于Slab上的Wikipedia,它消除了分配和取消分配造成的碎片。听起来你可能会从中受益。你需要一份工作;slab就是这个加上它预先初始化内存。