J'ai un fichier texte de configuration sur un système embarqué avec un système d'exploitation Linux. Les exigences sont que le fichier est du texte, et le système embarqué a 32 mégaoctets de RAM dynamique. L'application. qui lira le fichier est codé en C++.Fragmentation de la mémoire à partir de la lecture du fichier dans le système embarqué
Le fichier peut être lu en utilisant une méthode comme celle-ci.
#include <string>
#include <fstream>
ifstream infile ("config_file_path");
if (infile.good())
{
string line;
// Set capacity to length of the longest line.
const unsigned char maxLen = 100;
line.reserve (maxLen);
while (std::getline (infile, line))
{
// Process the data in the line.
processData (line);
}
}
Est-ce que la fragmentation de tas serait un problème pour cette implémentation? Le fichier peut contenir jusqu'à 150 lignes de texte à lire.
Vous pouvez utiliser une chaîne avec un allocateur personnalisé, de sorte que vous allouez la mémoire comme vous le souhaitez – DarthRubik
Quel genre de problème attendez-vous? 32 Mo est un gros morceau de mémoire.Mais pour éviter toute fragmentation, je suggère d'allouer un morceau qui serait la taille du fichier et le charger (sans tampon, avec 'read') avec le contenu du fichier. Oubliez les 'chaînes', utilisez 'char *' – Serge
Dépend de la durée de vie de ce code. Si elle est exécutée une fois et se termine rapidement - probablement, pas de problème. Si vous avez besoin d'une robustesse et d'une disponibilité élevées - Keep It Simple. – ddbug