GCC会决定一个变量作为不同的类型更好吗

GCC会决定一个变量作为不同的类型更好吗,c,gcc,C,Gcc,例如,如果我声明int num=7;并且只以一种方式使用它,它可以并且应该被声明为const char num=7;由于char使用的内存比int少,gcc会对此进行优化吗?还是因为它将被转换为汇编,所以这根本不重要?我意识到,在这种情况下,变量将被完全优化,但有没有可能出现这样一种情况,即gcc认为变量作为另一种类型更好 如果程序的副作用没有明显差异,那么编译器有权进行它喜欢的任何优化。7可能永远不会出现在生成的代码中,例如,如果您只在表达式(如n+3)中使用它,并且如果您不使用它的地址,它不

例如,如果我声明int num=7;并且只以一种方式使用它,它可以并且应该被声明为const char num=7;由于char使用的内存比int少,gcc会对此进行优化吗?还是因为它将被转换为汇编,所以这根本不重要?我意识到,在这种情况下,变量将被完全优化,但有没有可能出现这样一种情况,即gcc认为变量作为另一种类型更好

如果程序的副作用没有明显差异,那么编译器有权进行它喜欢的任何优化。7可能永远不会出现在生成的代码中,例如,如果您只在表达式(如n+3)中使用它,并且如果您不使用它的地址,它不需要任何存储。

如果程序的副作用没有明显的差异,那么编译器有权进行任何它喜欢的优化。7可能永远不会出现在生成的代码中,例如,如果只在表达式(如n+3)中使用它,并且如果不使用它的地址,它就不需要任何存储。

char使用更少的存储空间,但其上的操作很可能涉及比int更多的CPU操作。因此,用char替换int会降低程序的速度,同时减小其大小。除非您有大量的存储空间,使用char代替int既不节省时间也不节省空间。编译器必须发出额外的代码来来回转换,而这些代码占用的空间比char节省的空间还要多。担心使用字符作为微小的整数是一个毫无意义、不必要、适得其反的微优化的好例子。为了优化速度或空间使用,而不是在这种情况下,如果编译器意识到变量没有在任何地方修改,它可以简单地用立即值替换。在其他情况下,它可能根本不使用内存,而是将值保留在内存中registers@Dom简单地说,不,它不一定有意义。根据这个逻辑,a你应该有一辆单座车,当你没有乘客时你总是开着它,b你应该在编辑完文件后压缩所有文件,并在你想查看的时候解压,c你应该用一张7美元的钞票支付7美元的物品,因为使用10或20是浪费的…@Dom:空间很可能会被浪费;在大多数现代体系结构中,对象在多字节边界上对齐。您可能只使用给定字的低位8位,但这并不一定意味着高位可供任何其他字使用。char占用的存储空间较少,但其上的操作很可能比int涉及更多的CPU操作。因此,用char替换int会降低程序的速度,同时减小其大小。除非您有大量的存储空间,使用char代替int既不节省时间也不节省空间。编译器必须发出额外的代码来来回转换,而这些代码占用的空间比char节省的空间还要多。担心使用字符作为微小的整数是一个毫无意义、不必要、适得其反的微优化的好例子。为了优化速度或空间使用,而不是在这种情况下,如果编译器意识到变量没有在任何地方修改,它可以简单地用立即值替换。在其他情况下,它可能根本不使用内存,而是将值保留在内存中registers@Dom简单地说,不,它不一定有意义。根据这个逻辑,a你应该有一辆单座车,当你没有乘客时你总是开着它,b你应该在编辑完文件后压缩所有文件,并在你想查看的时候解压,c你应该用一张7美元的钞票支付7美元的物品,因为使用10或20是浪费的…@Dom:空间很可能会被浪费;在大多数现代体系结构中,对象在多字节边界上对齐。您可能只使用给定单词的低位8位,但这并不一定意味着高位可用于其他任何用途。