c ++ static const变量和ROMable

时间:2016-08-04 11:57:17

标签: c++ generics template-meta-programming sections rom

我一直在阅读全局范围内声明的const变量存储在.rodata中。我现在理解的是只读数据。通常显然存储在ROM中。

我已经开始阅读C ++中的模板元编程。所以我首先想知道为什么它需要在.rodata或静态const中,如

template<int N>
struct is_even<N>{
      static const bool value = N % 2 == 0;
}

为什么它必须是静态const? 这又是什么给我买的? 什么是在.rodata的重要性? 什么是所谓的ROMable的重要性?

我理解模板,因为它类似于我使用的C#中的泛型。但更强大。

我想要了解的是为什么这些约束是必要的以及编译器在评估我的程序时对它们做了什么。

欢迎任何链接和参考。

布莱尔

2 个答案:

答案 0 :(得分:1)

在ROM或任何其他地方使用const变量不是强制性的。这是一个实现细节。有些编译器可能将它们放在ROM中,而其他编译器则不放

编译器只需保证在访问此类变量时,格式良好的C ++程序始终获得声明的值。

在某些系统中,存在大量可用ROM和少量RAM。这种系统的一个例子是Nintendo DS,它有4Mb的RAM,但rom在盒式磁带中,可以是几百Mb。在这样的系统中,如果可能的话,你应该将所有内容放在ROM中,并且只为真正随时间变化的变量保留RAM;因为RAM很少而且ROM没有。所以这里的增益是程序适合但如果你把const变量放在RAM中它可能不合适。

答案 1 :(得分:0)

由于没有语言中的RAM / ROM概念,因此c ++没有标准的功能可将任何数据存储在ROM中。

在某些情况下,某些编译器会这样做,但没有标准。

C和C ++是有史以来最糟糕的语言的另一个原因。