首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Cortex-M3的lpcxpresso : libc.a(lib_a-impure.o)是什么?为什么它使用1k的ram?

带Cortex-M3的lpcxpresso : libc.a(lib_a-impure.o)是什么?为什么它使用1k的ram?
EN

Stack Overflow用户
提问于 2013-07-07 19:08:42
回答 2查看 2.7K关注 0票数 5

我希望这不是专门针对领域的。我想知道为什么libc.a使用我芯片上的8K内存中的1K。

除了在array_init中调用全局对象的构造函数之外,我不知道使用libc的任何方式。据我所知,它也涉及到默认的复制构造。我使用池分配,所以没有堆相关的东西(据我所知,我确实使用placement,但这不应该导致libc使用ram )。如果我完全省略了这个库,并使用placement作为一个黑客来构造我的所有全局对象,我的程序运行良好,这是另外一个提示,表明libc使用的1k内存是无用的。谁能告诉我如何继续阅读或解释如何保持array_init和默认复制构造的POD类型,但摆脱内存开销?

下面是我的项目的.map文件中的违规条目:

代码语言:javascript
复制
 *(vtable)
 *(.data*)
 .data._ZN3CDC4CoreI5MyCDCE11depInEmpty_E
                0x10000000        0x1 ./src/Main.o
                0x10000000                CDC::Core<MyCDC>::depInEmpty_
 *fill*         0x10000001        0x3 00
 .data.SystemFrequency
                0x10000004        0x4 ./kvasir/system_LPC17xx.o
                0x10000004                SystemFrequency
 .data.impure_data
                0x10000008      0x428 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-impure.o)
 .data          0x10000430        0x4 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o
                0x10000430                __dso_handle
                0x10000434                . = ALIGN (0x4)
                0x10000434                _edata = .

.jcr            0x10000434        0x0 load address 0x00003ee8
 .jcr           0x10000434        0x0 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o

.bss            0x10000434     0x1600 load address 0x00003ee8
                0x10000434                _bss = .
 *(.bss*)
 .bss.inBuf     0x10000434       0x34 ./src/Main.o
                0x10000434                inBuf

更新

在逐行检查代码之后,我找到了一个修复程序,在我的一个类中定义了一个空析构函数。

代码语言:javascript
复制
~MyClass(){}

注释掉掉了1K的内存。有人能告诉我为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-28 10:22:48

在阅读了一些newLib代码之后,在我看来,这是由加载了一些多线程的东西造成的。我通过不声明任何非默认析构函数来解决这个问题。我已经读到newLib将解决这个问题,但是我还没有进行测试,因为我的IDE还不支持它。

票数 1
EN

Stack Overflow用户

发布于 2013-07-07 19:22:13

这不是一个直接解决你的问题,但可能是一个线索。impure_data部分是库的重入支持的一部分。http://web.archive.org/web/20090106124055/http://venus.billgatliff.com/node/3

如果这个部分消失了,我想知道您是否用-ffunction-sections -fdata-sections重新构建了这个库?听起来好像你从图书馆里把珍贵的东西说得很少,所以这可能是有效的。否则,您可能会被困在新库上,或者只是借用您真正想要的部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17515362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档