Maison >développement back-end >C++ >Comment puis-je obtenir une allocation de mémoire contiguë pour un tableau 2D déclaré statiquement en tant que membre de classe ?
Pour éviter l'allocation de mémoire dynamique et garantir une allocation de mémoire contiguë, vous pouvez utiliser une alternative approche pour déclarer des tableaux 2D en tant que membres de classe.
Au lieu d'utiliser un tableau 2D traditionnel, vous pouvez créer une classe qui simule le comportement d'un tableau en utilisant un vecteur comme structure de données sous-jacente. Cette technique offre plusieurs avantages :
Premièrement, un vecteur stocke ses éléments de manière contiguë en mémoire, éliminant ainsi le risque de manque de cache. Deuxièmement, vous bénéficiez de la flexibilité nécessaire pour personnaliser la classe selon vos besoins spécifiques.
Pour démontrer cette approche, considérez le code suivant :
class Array2D { public: vector<int> v; int nc; Array2D(int NR, int NC) : v(NR*NC), nc(NC) {} int* operator[](int r) { return &v[r*nc]; } };
Ici, la classe Array2D contient un vecteur v et une variable entière nc représentant le nombre de colonnes. A l'aide du constructeur, vous pouvez initialiser la taille du tableau 2D (NR, NC).
Pour accéder aux éléments du tableau, l'opérateur[] est surchargé. Lorsque vous appelez array2d[0][0], il renvoie un pointeur vers le premier élément de la première ligne.
Dans la fonction principale :
Array2D array2d(2, 3); array2d[0][0] = 1; array2d[1][2] = 6;
Ce code attribue la valeur 1 au premier élément et 6 au dernier élément du tableau2d.
Cette implémentation fournit un tableau 2D déclaré statiquement en tant que donnée membre de la classe, garantissant stockage en mémoire contiguë. Il offre un meilleur contrôle sur l'allocation de mémoire et évite les éventuels manquements de cache, ce qui en fait un choix efficace pour les applications sensibles aux performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!