Rob*_*rtS 6 c c++ memory types allocation
例如:
#include <stdio.h>
int main (void) /* Why int and not short int? - Waste of Memory */
{
printf("Hello World!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么main()通常用inttype 定义类型,如果通常只返回0或1,则在32位内存上分配4个字节,而其他类型(例如short int(2个字节,32位)甚至char(1个字节,32位)会节省更多的内存吗?
它浪费了内存空间。
注意:问题不是给定线程的重复;它的答案仅对应于返回值本身,而与明确关注的数据类型不对应。
问题是针对C和C ++的。如果这些答案之间的答案有所变化,请在提到特定语言的上下文时分享您的智慧。
通常,汇编器使用其寄存器返回值(例如AXIntel处理器中的寄存器)。类型int对应于机器字,即,不需要将例如与类型char相对应的字节转换为机器字。
实际上,main可以返回任何整数值。
这是因为一台机器已有半个世纪的历史了。
早在创建C的那一天,an int是PDP-11上的一个机器字-16位-并且将其main返回自然而有效。
Ritchie和Thompson较早开发了B语言,而C则从B语言中脱颖而出。
当C添加类型时,未指定类型会给您一个机器字-an int。
(当时节省空间非常重要,因此不需要拼出最常见的类型就是一件很好的事情。)
因此,由于B程序开始于
main()
Run Code Online (Sandbox Code Playgroud)
并且程序员通常是语言保守的,C做了同样的事情并返回了int。
我不认为这是浪费有两个原因:
如果要返回准确描述错误的退出代码,则需要8位以上的位。
例如,您可能希望对错误进行分组:第一个字节可以描述错误的模糊类型,第二个字节可以描述导致错误的函数,第三个字节可以提供有关错误原因的信息,第四个字节可以描述错误的原因其他调试信息。
如果传递单个 short或char,它们仍将对齐以适合一个机器字,这通常为4 Byte / 32位,具体取决于体系结构。这称为填充,意味着您很可能仍需要32位内存才能返回单个 short或char。
第一:您的假设/陈述本身if it usually returns only 0 or 1就是错误的。
通常,如果没有发生错误,则返回代码0,但否则它可以返回任何数字来表示不同的错误。大多数(至少是命令行程序)都是这样做的。许多程序也输出负数。
然而,这里还有一些常用的代码,https://www.tldp.org/LDP/abs/html/exitcodes.html另一个SO成员指向包含一些代码的unix标头/sf/answers/1688492571/
因此,毕竟它不仅仅是一个C或C++类型的东西,而且还有大多数操作系统如何工作并期望程序表现的历史原因,并且因为语言必须支持这一点,所以至少C像语言通过使用int main(...).
第二:你的结论It is wasting memory space是错误的。
int不会造成任何浪费。无论如何,内存通常以字大小处理(这意味着可能取决于您的架构)return 0;此时就不会使用任何内存。如果你return myMemorySaving8bitVar;只使用了 1 个字节(最有可能在堆栈上(如果根本没有优化的话))| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |