打印
[技术问答]

一个printf()函数4kB大小

[复制链接]
2688|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yorkbarney|  楼主 | 2024-8-16 06:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近整合项目,遇到一个问题,我一开始没有注意,后来才慢慢发现,那就是我的程序已经烧不进去芯片中,经过翻查手册后才发现,新唐cortex-m051的Flash只有8KB,我的程序编译完之后bin文件竟然有16KB,而我的程序加上注释也只有1300多行,怎么会那么大呢?


笔者不知道是什么问题,于是就开始删减程序,把一些可以要可以不要的程序删除,(就是要了之后会更人性化的部分部分),等删除到printf 的时候,奇怪的事情出现了,我删除了4个printf,bin文件从16KB缩减到13KB,于是我把所有的printf都删除了,程序直接缩减到11KB。后来在一个程序中,非常小的程序中,一个printf函数调用,竟然多了4KB的空间。


由于一个函数而使我的程序大了那么多,我很好奇,于是便去翻查这个函数的原型,在新唐cortex-m0中到底是怎么封装的,可惜却没有找到,于是接下来弄别的程序,也没有管其它了,12月16日,新唐会来南京开巡回演讲,到时候我会问清楚他们的,等有了答案我再和大家分享


对于嵌入式编程来说,每个字节的空间都是那么的珍贵,希望各位同仁在编程的时候,慎用printf,虽然这个函数确实很方便,但是对于空间不足的来说,只能望而却步了,可以用它系统自带的UART功能中的send_to_PC()即发送一个字节通过串口到电脑。

使用特权

评论回复
沙发
cr315| | 2024-8-19 16:18 | 只看该作者
不错的机会,正好面对面解决你的疑惑

使用特权

评论回复
板凳
呐咯密密| | 2024-8-19 17:08 | 只看该作者
是不是使用printf打印中文调用某些库了

使用特权

评论回复
地板
jasontu| | 2024-8-20 10:11 | 只看该作者
因为keil原生的printf打印时操作float等等…
可以参考https://github.com/OpenNuvoton/NUC230_240BSP/blob/master/SampleCode/NuEdu/Smpl_Basic01_UART_printf/main.c
印整数及字串

使用特权

评论回复
5
clyu| | 2024-8-23 13:41 | 只看该作者
keil里面选择MicroLib

使用特权

评论回复
6
pmp| | 2024-9-9 10:00 | 只看该作者
printf() 函数是一个复杂的函数,因为它需要处理各种格式化选项和参数,以及字符编码和缓冲输出等问题。因此,它的实现可能相对较大。

使用特权

评论回复
7
sdCAD| | 2024-9-9 16:28 | 只看该作者
大多数情况下,printf()函数的大小不会达到4kB。

使用特权

评论回复
8
burgessmaggie| | 2024-9-9 19:54 | 只看该作者
如果标准的 printf() 函数太大,你可以实现一个简化版的打印函数,只包含你需要的功能。

使用特权

评论回复
9
mikewalpole| | 2024-9-9 22:56 | 只看该作者
有些第三方库提供了轻量级的打印功能,它们可能更适合资源受限的环境。

使用特权

评论回复
10
burgessmaggie| | 2024-9-10 01:58 | 只看该作者
当调用 printf() 函数时,可能会在堆栈上分配一些空间来存储局部变量和函数参数。

使用特权

评论回复
11
10299823| | 2024-9-10 04:59 | 只看该作者
printf()函数的大小取决于编译器和操作系统的实现。

使用特权

评论回复
12
hilahope| | 2024-9-10 17:51 | 只看该作者
有些第三方库提供了轻量级的打印功能,它们可能更适合资源受限的环境。

使用特权

评论回复
13
yorkbarney|  楼主 | 2024-9-10 19:53 | 只看该作者
printf() 函数的大小并不是一个固定的值

使用特权

评论回复
14
usysm| | 2024-9-10 21:23 | 只看该作者
printf()函数的大小取决于编译器和操作系统的实现。

使用特权

评论回复
15
jkl21| | 2024-9-11 11:22 | 只看该作者
链接一个使用 printf() 的程序时,可能会链接整个 C 标准库,特别是 printf() 依赖的 printf 支持函数,比如 vfprintf()、格式化函数等。整个标准 I/O 库的大小可能会接近或超过 4KB。

使用特权

评论回复
16
updownq| | 2024-9-11 14:24 | 只看该作者
大小会根据编译器优化级别、目标平台等因素而有所不同。

使用特权

评论回复
17
yeates333| | 2024-9-11 16:41 | 只看该作者
printf() 函数的大小取决于具体的编译器和库实现,但通常只有几 KB 或更少。

使用特权

评论回复
18
rosemoore| | 2024-9-11 18:57 | 只看该作者
一个典型的printf()函数的大小通常远远小于4kB。

使用特权

评论回复
19
1988020566| | 2024-9-11 20:42 | 只看该作者
在GNU libc(Linux中常用的C库)中,printf()函数的实现包含了大量的格式化选项和错误处理逻辑,因此它的尺寸远远超过4kB。

使用特权

评论回复
20
AloneKaven| | 2024-9-11 20:57 | 只看该作者
用keil的库了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

1233

帖子

1

粉丝