回复 14楼 lin5161678
也许是我学识浅薄理解过于片面了
我的理解是,程序是在系统上编译的,很大一部分东西都会直接利用系统交互来完成,像常量这些东西我的想法是它们虽然是编译的时候就存在的,但不可能无中生有,要么是存储在编译器的程序初始化环境,要么就是直接从系统获取相关讯息,而为什么要用四个字节的int类型来保存一个字节就能保存的char类型的ASCII字符'a'呢,无关内存看起来没错,但只是它早就占用内存了,而不是本身不存在到用时就一用即来对吧,毕竟我们并没有对'a'进行声明,确切来说,所有字符集我们都没进行声明,它们是在编译器&&系统之中已经保存有相关数据了。
这里我个人就有两个假设的可能性
第一,不论它来自于系统,还是编译器程序,它都是int类型的空间保存的,原因是为了向后兼容,可以添加各种语言的文字,统一保存为int类型,为什么要统一?直接继续用char保存不好么,97而已,自然是为了对齐统一省事吧?连结构内成员编译器都会自行对齐,这个我觉得有存在意义。
第二,依旧不论它来自于系统,还是编译器,在windows的环境下编译,它从32位系统诞生时就被定义为4个字节的int类型保存了,这个干脆就是为了字节统一(就个人所知,纯64位的CPU,仅曾经在intel的服务器CPU上出现过几例,后面的64位仅仅是32兼容64(x64),这些东西肯定有关联),而在32位模式中,4字节的数据是一步到位的,以至于系统底层就考虑这种对齐的做法,所以它们的这些表现有关联这种猜想没问题吧?
基于这些推测,那么我就认为,sizeof('a')不论是什么结果,都取决于系统或编译器的设定,而不是个人主观臆测,对结果不必太过惊讶,坦然接受,也可以深入挖掘原理,这种想法我认为没有太大问题,当然有详细且正确的资料,欢迎指正,我也只是条咸鱼罢了。
当然,以上纯粹猜测,还是我懂得太少,也许什么时候我是那种能手动撸个系统出来的dalao,我才有资格下定论吧。