【问题标题】:C how code size is determined?C代码大小是如何确定的?
【发布时间】:2026-02-02 05:55:01
【问题描述】:

我正在尝试为内存非常有限的嵌入式编程目的编写一些 C 代码,我需要尽可能减少代码大小。

那么我有几个关于代码大小的问题

1. does length of variable name matter for code size? 
   Is it good to keep variable name short for embedded programming?

2. Does each letter count as 1 byte for actual code size?
   for ex. 'if' statement, is it counted as 2 byte?
   when code to loaded to memory is prepared how letters including key words count?

【问题讨论】:

  • 这两方面都没有。你知道编译器的工作原理和机器码是什么吗?
  • 大多数编译器都提供了一个选项来发出生成的汇编代码(例如,使用 gcc 是 -S 选项 - 讨论了here)。这可以帮助您了解您的 C 代码是如何被翻译成机器指令的。
  • 正如 Thilo 所指出的,您对 C 编译器如何工作的假设是不正确的。内存有多大限制?当前代码/数据/堆栈/堆的细分是什么?
  • '我对编译器和机器码不是很熟悉' - 你无法执行这个任务。
  • 我强烈建议任何程序员学习一些汇编程序或与硬件相关的编程,以了解计算机和程序在现实中是如何工作的,而不是高级语言。

标签: c embedded size


【解决方案1】:

优化代码和数据大小通常是经验丰富(5-10 年以上经验)软件工程师的任务。需要对系统的所有级别有透彻的了解,才能做出改变,以减少代码大小(或静态数据大小、堆栈大小、堆大小等),而不是盲目猜测。

这样的理解会排除你所有的问题,因为编译后的代码中根本没有变量名。并且源代码分几步翻译成机器指令:源代码在目标系统上根本不存在。

一些减少代码大小的简单技术是:

  • 识别重复的操作并将它们折叠成一个通用函数
  • 删除未使用的代码
  • 简化或降低应用程序的复杂性
  • 根据每个使用的代码量删除功能

其中一些很容易。有些可能很难评估。

【讨论】:

    【解决方案2】:

    关键字和变量名根本不重要。重要的是:

    • 结构、字符串、常量、数组的大小(如果它们是静态的或初始化为大的)
    • 可能包含不必要的结构/字符串/等的头文件
    • 位图等资源

    【讨论】:

    • 函数调用的数量呢?而且我认为从堆分配的内存不算在内,因为代码大小是正确的吗?
    • 没错,堆不算作代码。但是 Stack 确实如此,特别是如果它包含常量......关于函数调用的数量......它真的取决于函数。有些像内联函数一样完全是轻量级的,有些使用大堆栈......那部分是特定于代码的
    • 为什么投反对票?堆不是代码吗?好吧,我同意 - 这并不完全准确......堆是代码运行时的代码,但不是之前 - 除了静态变量/声明。
    • 我不是反对者,但对于许多(甚至可能是大多数)应用程序来说,最小化堆大小比最小化 .text/.data 重要得多。此外,除了 getter/setter 之外的任何内联函数都会比函数调用消耗更多的空间。
    • 是的@AndrewC 我明白你的意思。我想我正在考虑使用小而最少的内联函数,这实际上违背了它们的目的,因为它们经常被使用。堆——用于工作全局内存——我也明白你的意思。谢谢
    最近更新 更多