【发布时间】:2019-09-16 10:29:30
【问题描述】:
这是我拥有的代码的 sn-p:
class modbus {
public:
static const uint8_t modbusHeader = 2;
static const uint8_t modbusCRC = 2;
static const uint8_t modbusPDU = modbusHeader + modbusCRC;
static const uint8_t exceptionBase = 0x80;
static const uint32_t transmitTimeout = 5000;
};
它为我需要在类中创建的 modbus 数据包定义了一些大小。我在嵌入式环境中工作,因此始终存在尺寸优化和考虑因素。因此,我真的希望在闪存的只读部分中只出现一次这些常量值。
我选择将这些变量设置为static,但这有必要吗?编译器是否会推断这些值只需要在二进制文件中保存一次,因此当我删除 static 关键字时只包含一次?
【问题讨论】:
-
如果你删除
static,语义就会改变。 -
是的,但我觉得它是不必要的,因为它不是可变变量,因此不能传达多个对象访问单个变量的含义。我认为如果我删除
static它将消除一些噪音,因为没有机会出现竞争条件等。但我担心空间优化。 -
如果你只从变量中读取,为什么会有竞争条件?这是什么系统?你提到闪光灯。它是微控制器还是伪装的 PC?
-
您的问题缺少一些关键信息。如果您删除
static关键字,则该语言要求类的每个对象都有自己的常量副本(每个对象可能有不同的值)。编译器如何推断这些值只需要保存一次?