unsigned char in 在 C 中的嵌入式系统中的有用性
Usefulness of unsigned char in on embedded systems in C
我正在用 C 开发一个 Chip-8 仿真器,目标是让它跨平台并且尽可能小以与嵌入式系统和低规格系统兼容(并挑战我自己),这意味着能够使用 SDL、ncurses(当我达到这一点时)和其他东西。因此,我一直在使用 unsigned chars 代替 int 或 unsigned int,并且我使用 "typedef unsigned char byte" 来使其更方便。我是在浪费我的时间吗,即使我的目标是理想地使其与非常小的系统兼容,或者只使用 "typedef unsigned int byte" 就足够了而不牺牲性能?
您应该将解释器与 io 绑定分开。
只有解释器需要是 8 位可移植的。
每个目标平台都有一组不同的可用于 IO 的技术。
SDL 或 curses 会给你一些 *nix 和 windows 平台之间的可移植性,但如果可用,你可能会有 32 位整数,也许必须处理 16 位。但肯定不是 8 位整数。
另一方面,处理 8 位和 16 位裸机处理器,意味着您可能只需将项目直接挂接到图形驱动程序。
您的基本思路是正确的,但不是解决方案。在现代 C 中,我们在 stdint.h 中有 uint_fast8_t
类型。
这是您应该使用的类型,这意味着您要告诉编译器:"I don't need more than 8 bytes for this integer, but feel free to use a larger size if that improves performance."
我正在用 C 开发一个 Chip-8 仿真器,目标是让它跨平台并且尽可能小以与嵌入式系统和低规格系统兼容(并挑战我自己),这意味着能够使用 SDL、ncurses(当我达到这一点时)和其他东西。因此,我一直在使用 unsigned chars 代替 int 或 unsigned int,并且我使用 "typedef unsigned char byte" 来使其更方便。我是在浪费我的时间吗,即使我的目标是理想地使其与非常小的系统兼容,或者只使用 "typedef unsigned int byte" 就足够了而不牺牲性能?
您应该将解释器与 io 绑定分开。
只有解释器需要是 8 位可移植的。
每个目标平台都有一组不同的可用于 IO 的技术。
SDL 或 curses 会给你一些 *nix 和 windows 平台之间的可移植性,但如果可用,你可能会有 32 位整数,也许必须处理 16 位。但肯定不是 8 位整数。
另一方面,处理 8 位和 16 位裸机处理器,意味着您可能只需将项目直接挂接到图形驱动程序。
您的基本思路是正确的,但不是解决方案。在现代 C 中,我们在 stdint.h 中有 uint_fast8_t
类型。
这是您应该使用的类型,这意味着您要告诉编译器:"I don't need more than 8 bytes for this integer, but feel free to use a larger size if that improves performance."