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 ?

Comment puis-je obtenir une allocation de mémoire contiguë pour un tableau 2D déclaré statiquement en tant que membre de classe ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-20 15:32:10689parcourir

How Can I Achieve Contiguous Memory Allocation for a Statically Declared 2-D Array as a Class Member?

Tableau 2D déclaré statiquement en tant que membre de données de classe : obtention d'une allocation de mémoire contiguë

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn