问题标签 [code-size]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
loops - 当必须使用循环命令时,无论如何要增加循环命令的范围
我收到错误代码,说跳转太长了 5 个字节,指的是外循环。我知道只使用 jmp 命令并自己跟踪计数器会更简单,但我的家庭作业要求使用循环来代替。有没有办法扩展循环的范围,或者有没有办法将循环中的内容缩小 5 个字节,而我没有看到?
循环应该检查一个数字是否是复合的,只是为了知道功能。
c++ - C++ 模板 - 代码使用、二进制文件大小
我想知道模板代码的代码大小。请考虑以下代码
当我有两个向量实例时,
它会被编译成具有两个push_back
实现的二进制文件吗
还是只有一个,还是别的什么?
是否可以使用模板来减少代码大小,而不是为float
和int
向量创建单独的类?
c++ - std::array 模板实例会占用更多的代码内存吗?
我有一个没有 MMU 的微控制器,但我们使用的是 C 和 C++。
我们正在避免所有动态内存使用(即 no new SomeClass()
or malloc()
)和大多数标准库。
半问题0:
据我了解std::array
,它不使用任何动态内存,所以它的使用应该没问题(它只在堆栈上)。查看std::array
源代码,它看起来不错,因为它创建了一个 c 样式的数组,然后在该数组周围包装了功能。
我们使用的芯片有 1MB 的闪存用于存储代码。
问题一:
我担心在其中使用模板std::array
会导致二进制文件变大,这可能会导致二进制文件超过 1MB 代码内存限制。
我认为,如果您创建 a 的实例std::array< int, 5 >
,那么对其上的所有函数调用都std::array
将占用一定数量的代码内存,比如说 X 字节的内存。
如果您创建另一个实例std::array< SomeObject, 5 >
,然后调用该实例的函数std::array
,这些函数中的每一个现在是否会在二进制文件中重复,从而占用更多代码内存?X 字节内存 + Y 字节内存。
如果是这样,您认为在代码存储容量有限的情况下生成的代码量是否值得关注?
问题2:
在上面的示例中,如果您创建了第二个std::array< int, 10 >
实例,对函数的调用是否也会复制生成代码中的函数调用?即使两个实例属于同一类型,int
?
c - 制表符和空格如何影响 C 中的代码大小
在嵌入式系统上工作时,内存的每个字节都很重要,在 C/C++ 程序中,当您使用 4 个空格而不是 1 个制表符时,生成的代码大小有什么不同吗?
c++ - 为什么简单使用 ostringstream 会生成这么多汇编代码?
考虑以下简单示例,该示例使用ostringstream
并丢弃输出来格式化字符串和整数:
编译它会clang++ -S -O3 -DNDEBUG -std=c++14 test.cc
生成大量的汇编代码(x86-64 指令中的半千字节,而类似sprintf
代码的不到一百字节) - 请参见下面的输出。为什么它会生成这么多代码,是ostringstream
API 固有的还是这个特定的编译器/库做错了什么?
assembly - 对寄存器中的位进行计数的最小代码大小循环(递减另一个寄存器)?
我需要在 8086* 程序集中尽可能短(小于 10 个字节)编写以下 C 代码片段,但我只能设法将其写入 12 个字节。
有任何想法吗?
c - C 如何减小程序大小
我正在为 uController 编写 ac 程序,我设法用代码填充了 32kb。
该程序充满了以下“打印”功能:
SerialWrite 看起来像:
我用字符串文本调用 print 函数作为参数,例如:
我只使用了 32kb 外部存储器中的 2.2kb,所以我的结论是将“Hello World”移动到外部存储器,而不是在主程序中硬编码。
不幸的是,我的尝试实际上使情况变得更糟,我做了以下事情:
比我试过的:
这确实将外部内存大小增加了 12,这是正确的,因为字符串包含 11 个字符 + 空值。但程序内存也增加了 3。我尝试了不同的字符串长度,但程序内存不断增加 3 个字节。
我怎么解决这个问题?
另外:我正在使用 Keil 的 C 编译器,并且我在编译时有利于程序大小。uController 是一个 FPGA 芯片,具有仿真的 80C51 芯片。对于这个虚拟 80c51,我正在编写代码。我有 32kb 内存用于主程序,32kb 用于变量
编辑: *msg[] 是一个错字,它必须是 *msg
c++ - 为什么?更改构建结构后,可执行文件大小显着减小
我在我的个人 C++ 项目中构建了一个简单的编译器,称为simplecc。今天,我对其进行了重构,这改变了主可执行文件的构建方式,或者如我所说,构建结构和可执行代码大小下降了近一半。
我的项目有很多组件,例如AST
和CodeGen
,它们以它们的功能命名。每个组件都驻留在自己的文件夹中(标题和 cpp 都有)。有一个lib/
目录包含所有其他组件的目录,并且一个CMakeList.txt
inlib/
生成单个可执行文件simplecc
。现在这里有区别。
旧代码:
新代码:
在每个子目录中,从该组件的源代码构建一个静态库(存档)。最后,这些档案被链接到可执行文件中。
虽然我认为我只是组织了代码以便更好地跟踪它cmake
,但它大大减少了可执行文件的代码大小!剥离后的旧代码是14M和3.7M。新代码剥离前为2.4M,剥离后为5.6M,剥离后为560K。这怎么可能发生?一般是真的吗?它是特定于项目的吗?我的项目广泛使用CRTP。
编辑:这些数据来自调试版本。我还没有完成发布版本(稍后会添加)。
linux - Print newline with as little code as possible with NASM
I'm learning a bit of assembly for fun and I am probably too green to know the right terminology and find the answer myself.
I want to print a newline at the end of my program.
Below works fine.
But I'm hoping to achieve the same result without defining the newline in .data. Is it possible to call sys_write
directly with the byte you want, or must it always be done with a reference to some predefined data (which I assume is what mov rsi, newline
is doing)?
In short, why can't I replace mov rsi, newline
by mov rsi, 10
?
assembly - 从 32 位 x86 汇编代码中读取程序的字节数的方法是什么
我正在做一个简单的堆栈粉碎练习。我需要在我的程序集中写入一个特定偏移量的短跳。我需要通过两条指令分隔的字节数来计算偏移量。
我一直在搜索谷歌,但我似乎无法获得正确的搜索词。
例如,我知道mov
操作码是 2 个字节。但是整个指令有多少字节取决于你src
和dest
......你是使用立即值还是偏移量,寻址模式是什么等等。
我知道在某个地方必须有一个图表或其他东西,我可以用它来计算这个。
Aleph One's Smashing the Stack for Fun and Profit 的第 12 页显示了我正在尝试做的事情(从汇编代码中计算字节数):http ://www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing .pdf