2016-05-07 6 views
0

Lorsqu'un tableau 2D est déclaré statiquement, nous obtenons un énorme bloc contigu d'adresses virtuelles. Ces adresses n'ont pas besoin d'être mappées à des adresses mémoire contiguës dans des adresses physiques. Est-ce que la même chose arrive pour un tableau 1D? Les adresses d'éléments individuels dans un tableau 1D sont-elles contiguës dans l'espace d'adressage physique ou peuvent-elles être mappées à des adresses sur différentes pages physiques?Mappage de tableaux de l'adresse virtuelle à l'adresse physique

Répondre

1

L'espace d'adresse virtuelle n'a rien à voir avec les tableaux en programmation C (je suppose que vous utilisez C). Lorsque vous avez un tableau 2D, la dernière dimension est juste virtuelle. Dans les coulisses, le compilateur a un long tableau 1D, et quand vous voulez atteindre un noeud spécifique, il fera une multiplication rapide du premier index et de la longueur d'exécution de la colonne avant d'ajouter le second index.

+0

Oui. Mais ce sont des adresses virtuelles non? L'emplacement réel où il sera stocké, c'est-à-dire, les adresses physiques dépend du mappage virtuel d'adresse physique par le TLB. Ainsi, dans une telle situation, des éléments de tableau 1D seront-ils mappés à des emplacements de mémoire contigus ou peuvent-ils être mappés à des adresses physiques sur des pages différentes? –

+0

Non. Les adresses virtuelles et le TLB ne sont pas nécessaires pour les baies 2D. À partir de la vue de la mémoire, un tableau 2D et un tableau 1D sont identiques. –

+0

Les adresses virtuelles et TLB ne sont pas visibles pour le processus utilisateur. Tout se passe dans le système d'exploitation, permettant à chaque programme d'avoir une mémoire unique, sans avoir besoin de connaître le swap, etc. –