2016-08-04 1 views
1

J'ai lu que les variables const déclarées dans la portée globale sont stockées dans .rodata. ce que je comprends maintenant est des données en lecture seule. Souvent, apparemment, cela est stocké dans la ROM. J'ai commencé à lire sur Template Meta Programming en C++. donc je suis d'abord demandé pourquoi il a besoin d'être en const .rodata ou statique tels queC++ static const variables et ROMable

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

pourquoi doit-il être const statique? aussi qu'est-ce que cela m'achète? Quelle est la signification d'être dans .rodata? quelle est la signification d'être soi-disant ROMable? Je comprends les modèles car ils sont similaires aux génériques utilisés en C# I. Mais juste beaucoup plus puissant. Ce que j'essaie de comprendre, c'est pourquoi ces contraintes sont-elles nécessaires et que fait le compilateur lors de l'évaluation de mon programme?

Tous liens et références bienvenus.

Blair

+0

Les données en lecture seule d'une application sont stockées dans la RAM. ROM - Mémoire en lecture seule - peut seulement être lu. Une section en lecture seule de RAM est une chose complètement différente; son statut en lecture seule peut être modifié lors de l'exécution. – molbdnilo

Répondre

0

Il est pas obligatoire d'avoir des variables const dans la mémoire morte ou dans tout autre lieu. C'est un détail d'implémentation. Certains compilateurs peuvent les placer dans ROM et d'autres non.

Le compilateur doit seulement garantir que les programmes C++ bien formés obtiennent toujours la valeur déclarée lors de l'accès à cette variable.

Dans certains systèmes, il y a un grand nombre de ROM disponibles et peu de RAM. Un exemple d'un tel système est la Nintendo DS qui a 4 Mo de RAM, mais la ROM est dans la cartouche, qui peut être dans les centaines de Mb. Dans de tels systèmes, vous devriez mettre tout en ROM si possible et ne réserver de la RAM que pour les variables qui changent vraiment dans le temps; parce que la RAM est rare et ROM non. Donc, le gain ici est que le programme s'adapte, mais si vous mettez des variables const dans la mémoire RAM, cela peut ne pas convenir.