Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数据类型范围作为一种节省内存的措施是否仍然重要?_C++_Memory_Types_Range - Fatal编程技术网

C++ 数据类型范围作为一种节省内存的措施是否仍然重要?

C++ 数据类型范围作为一种节省内存的措施是否仍然重要?,c++,memory,types,range,C++,Memory,Types,Range,我一直被教导根据类/方法/函数/成员/变量/您拥有的东西的特定需求使用适当的数据类型。也就是说,这还重要吗 假设,如果我有一个类,它的数据成员永远不会是负数,也永远不会超过无符号字符的最大值,那么将其存储为无符号字符(1字节)与int(4字节)会因为隐式类型升级/降级、内部表示而变得重要吗,寄存器大小和经常引用的“CPU在使用int时效率更高” 例如: class Foo { public: Foo() : _status(0) { /* DO NOTHING */ }

我一直被教导根据类/方法/函数/成员/变量/您拥有的东西的特定需求使用适当的数据类型。也就是说,这还重要吗

假设,如果我有一个类,它的数据成员永远不会是负数,也永远不会超过
无符号字符
的最大值,那么将其存储为
无符号字符
(1字节)与
int
(4字节)会因为隐式类型升级/降级、内部表示而变得重要吗,寄存器大小和经常引用的“CPU在使用
int
时效率更高”

例如:

class Foo {
    public:
        Foo() : _status(0) { /* DO NOTHING */ }
        void AddTo(unsigned char value) {
            if(std::numeric_limits<unsigned char>::max() - _stat < value) {
                value = std::numeric_limits<unsigned char>::max() - _status;
            }
            _status += value;
        }

        void Increment() {
            if(_status == std::numeric_limits<unsigned char>::max()) return;
            ++_status;
        }
    private:
        unsigned char _status;
};
class-Foo{
公众:
Foo():_状态(0){/*什么都不做*/}
void AddTo(无符号字符值){
如果(标准::数值限制::最大值()-_统计<值){
value=std::numeric_limits::max()-\u status;
}
_状态+=值;
}
无效增量(){
if(_status==std::numeric_limits::max())返回;
++_地位;
}
私人:
未签名字符状态;
};

通常使用“合适大小”类型的一个主要影响是,您和其他人在这方面浪费了很多时间

如果您存储了无数个值,例如一张非常大的图片,或者如果您绝对需要64位范围,那么在这种情况下,确定大小合适是有意义的

但是,使用正确的尺寸作为一般指导原则不会带来显著的收益,也不会带来太多的痛苦


权威论据:创建这种语言的比亚恩·斯特劳斯特鲁普通常只使用少数类型,例如,整数的
int

通常使用“大小合适”类型的主要效果是,您和其他人在这方面浪费了大量时间

如果您存储了无数个值,例如一张非常大的图片,或者如果您绝对需要64位范围,那么在这种情况下,确定大小合适是有意义的

但是,使用正确的尺寸作为一般指导原则不会带来显著的收益,也不会带来太多的痛苦

权威论据:创建这种语言的比亚恩·斯特劳斯特鲁普通常只使用几种类型,例如整数的
int

“过早优化是万恶之源”Donald Knuth

这一个数据成员的大小是否会显著影响类的大小?你正在序列化这个类吗?序列化表示是否有任何减少?当你的老板不在乎的时候,你是否因为担心这一点而使代码更难阅读

Y2K,IPv4 32位地址,ASCII,是的,未来会回顾你的代码并大笑。记住摩尔定律,写一些有用的东西,并期待着会有错误。直到它是你永远不会知道什么。编写可测试、可维护和可重构的代码,它可能会在生产中停留足够长的时间,以便有人关注。

“过早优化是万恶之源”Donald Knuth

这一个数据成员的大小是否会显著影响类的大小?你正在序列化这个类吗?序列化表示是否有任何减少?当你的老板不在乎的时候,你是否因为担心这一点而使代码更难阅读


Y2K,IPv4 32位地址,ASCII,是的,未来会回顾你的代码并大笑。记住摩尔定律,写一些有用的东西,并期待着会有错误。直到它是你永远不会知道什么。编写可测试、可维护和可重构的代码,它可能会在生产环境中停留足够长的时间,以便有人关注。

对于针对PC和服务器的大多数用例,您不必担心使用
char
s而不是使用
int
s来保存数值。只需使用
int
long
,如果需要更大的范围


但是,如果你瞄准A,你可能需要仔细考虑那个循环计数器是否需要占用超过1个字节。

对于大多数使用PC和服务器的用例来说,你不必担心使用<代码> char < /Case> s vs使用<代码> int <代码> s来保存数值。只需使用
int
long
,如果需要更大的范围


但是,如果你瞄准A,你可能需要仔细考虑循环计数器是否需要占用超过1个字节。

< p>除非有其他选择变量的特殊原因,否则请坚持<代码> int <代码>。现代编程的很大一部分是管理复杂性,如果代码实际上没有任何帮助,那么就没有理由开始使用各种类型的代码。当然,如果您有一个特定类的5000个副本,或者在一个内存占用受到严格限制的系统上工作,那么它可能很重要。但在一个千兆字节的系统上,这通常不会成为一个问题。在这种情况下,更多的是编写一些可理解和可维护的内容。

除非有特殊原因选择其他变量类型,否则请坚持使用
int
。现代编程的很大一部分是管理复杂性,如果代码实际上没有任何帮助,那么就没有理由开始使用各种类型的代码。当然,如果您有一个特定类的5000个副本,或者在一个内存占用受到严格限制的系统上工作,那么它可能很重要。但在一个千兆字节的系统上,这通常不会成为一个问题。在这种情况下,更多的是写一些可以理解和维护的东西。

您遇到了C风格语言的一个问题。它们剥夺了您在其他语言中进行范围检查的能力。如果您的值应该在一个特定的范围内,那么说一个类型的能力可以是,比如说,1..64对于错误跟踪来说是一个很大的帮助。通过将C/C++代码转换为pascal或ada,我发现了很多错误

在这种情况下,我喜欢使用typedef进行文档记录