De près et de Loin pointeurs
Quelle est la différence entre notre habitude pointeurs(celles dont nous avons l'habitude de les utiliser), près de pointeurs les pointeurs loin et est-il une pratique de l'utilisation de près et de loin les pointeurs dans le présent le jour de la C/C++ de systèmes? Un scénario qui necessiates utilisation de ces pointeurs et pas d'autres c,c++ sémantique sera très utile.
- Exactement, jamais vu, jamais utilisé sur mon expérience professionnelle et juste s'assurer que je ne suis pas absent dehors sur de ne pas savoir sur eux 🙂
- Mais ils sont dans
C
et pas dansC++
... n'est-ce pas?? Ou me manque quelque chose?? - Ils ne sont pas en soit. Ils sont dans certains faux implémentations de ces deux, et de leur mise en œuvre sont nonconformant si ils utilisent
near
etfar
comme des mots-clés (alors qu'ils pourraient être conforme si ils utilisent__near
et__far
ou_Near
et_Far
).
Vous devez vous connecter pour publier un commentaire.
La de près et de loin les mots-clés ont leur origine dans la segmentation de la mémoire de modèle que Intel avait avant. La proximité des pointeurs ne pouvait accéder à un bloc de mémoire à l'origine autour de 64 ko en taille appelé un segment alors que l'extrême pointeurs pourrait aller à l'extérieur de cette plage, composé d'un segment et le décalage dans le secteur. La proximité des pointeurs ont été beaucoup plus rapide que de loin les pointeurs donc, par conséquent, dans certains contextes, il a payé pour les utiliser.
De nos jours avec de la mémoire virtuelle de près et de loin les pointeurs n'ont pas l'usage.
EDIT:Désolé si je ne suis pas en utilisant des termes exacts, mais c'est la façon dont je m'en suis souvenu quand j'ai travaillé avec elle dans la journée 🙂
far
mot-clé est totalement inutile, et vous pourriez tout simplement de l'écrire sane code C, et prétendre que vous aviez une mi-montant utilisable de la mémoire linéaire.far
mot-clé était là, et tout compilateur 16 bits qui n'ont pas la faire, c'est 'mauvaise qualité'.far
dans le code serait la dernière des dernières stations pour quelqu'un qui a mis toute valeur sur un code portable, qui, malheureusement, a été la grande minorité de x86 codeurs...near
etfar
les pointeurs étaient pertinents pour les architectures x86, j'ai fait la plupart de mes de programmation de Soleil sur les systèmes SPARC.De près et de loin est parlé dans le contexte de l'architecture de la machine (x86, x64, 640 ko + modèle de la mémoire, x32 dans la moyenne de la mode protégé et segmenté, x86 en termes de segmentation de la mémoire)
Exemple: étant Donné un système 32 bits "long" d'adressage et de 8 bits adressage relatif. La distance relative qui permettrait au moins de 127 octets de l'en avant (valeur positive) ou précédente (négatif) de direction. Si la cible est de 1024 octets loin, un pointeur 32 bits doit être utilisé.
Aujourd'hui seulement x86 32 bits adressage - un pointeur long et x64 64 bits d'adressage et de la prise de (permanente) de la place. Oui, un x64 de windows est compilé par MS VC la façon dont il "voit" toujours comme x86 x32 demande SEULEMENT 4 go de mémoire. Si vous ne savez pas par le défaut de la différence entre le proche et le lointain ou certains autres addressation. MAIS x64 cible a la capacité d'adresse de la mémoire à l'aide de l'autre, long type de pointeur.
Comme vous le voyez il n'y a pas de scénario pratique dans MS VC si vous n'avez pas "voir" la variante de la version x64 de l'adressage sur 32 dans les différents pointeurs. Juste un hypotetics.
Rester à l'écart de cette pratique utilise sont
LP_STRING au long de pointeur vers la chaîne
et
INT_PTR entier la tenue d'une valeur de pointeur.
Vous devez d'abord comprendre que le CPU et le compilateur accepte l'ensemble de pointeurs à utiliser les tailles. Et seulement eux. Vous ne pouvez pas trouver un moyen de les contourner sans autres compilateurs/linkers/matériel.
INT_PTR - est juste pour le stockage des pointeurs qui ne dépasse pas les int longueur (d'une valeur de pointeur, où le pointeur de la longueur n'est pas supérieure à int).
et LP_STRING - est, juste le temps de type de pointeur de le compilateur/processeur (ils ont tous les deux comme des abstractions et le compilateur n'est pas égal dans le comportement du compilateur, ainsi que x64 peut être Intel rarement utilisé seul et largement utilisé AMD).
TOUTE taille de la variable peut être un pointeur.
Vous avez juste besoin d'un exemple pratique contre AMD x64 et LLP (long long pointeur).