2009-07-23 8 views
0

J'ai toujours mis les langues en 2 types ... celles qui vous permettent de faire référence à la mémoire "non définie" (non initialisée, libérée, etc.), comme comme C, C++, COBOL (?), Assembly, etc. et ceux que vous ne pouvez pas tels que Java, Perl, C# et Basic. Existe-t-il un terme «informatique» pour cette distinction? Pendant que nous y sommes, y a-t-il un terme informatique à ce que j'appelle «mémoire indéfinie»?terminologie pour distinguer les langues qui peuvent/ne peuvent pas faire référence à la mémoire indéfinie

Répondre

5

Sécurité du pointeur.

Je m'excuse de ne pouvoir pas attribuer l'auteur originel. Je sais que j'ai vu Erik Meijer et que je l'ai défini. La sécurité du pointeur (ou sécurité de la mémoire) est l'attribut d'un programme, ou de tous les programmes dans une langue particulière ou autre contrainte, où le programme ne peut pas adresser la mémoire autre que celle explicitement allouée et possédée, ou par un intermédiaire. comme OS.

La sécurité de type est également un attribut, mais elle est généralement plus stricte - si quelque chose est de type sécurisé, il est également sûr pour les pointeurs. Dans cet attribut, la mémoire est appelée "objets" qui ont un type, et le programme ne manipule jamais cette mémoire, sauf à travers des opérations sur ce type. Je vais laisser les différentes définitions conflictuelles de type pour le moment, car cela peut aussi être une grande question.

Ces attributs s'appliquent généralement et peuvent s'appliquer à diverses stratégies de gestion de la mémoire: allocations de tas dynamiques, allocateurs d'arène, piles et stockage «statique» ou «global». Ce ne sont pas seulement des tas. Wikipedia: pointer safety et type safety.

+0

Etes-vous sûr que la "sécurité du pointeur" se réfère à la question de l'unitialized variables locales? – JoelFan

+0

Je n'ai rien dit à propos des "locals non initialisés" en particulier, mais un langage "sans pointeur" traiterait nécessairement de l'utilisation de mémoire non initialisée lorsque cette mémoire doit être interprétée comme un pointeur. – Aaron

+0

Ok, mais ce que je cherche, ce serait de m'assurer qu'il n'est pas possible de se référer à la mémoire non initialisée du tout, qu'il s'agisse d'un pointeur – JoelFan

0

Pensez-vous à dynamic memory allocation et le tas?

+0

Un bon travail qui amène ces mots dans ce fil, mais C, C++, Java et C# font tous les mêmes choses en mémoire, c'est juste que Java et C# en retirent la gestion à l'utilisateur. – TahoeWolverine

0

Pouvez-vous définir "se référer à"? Si vous voulez simplement dire que vous pouvez obtenir la mémoire des ordures sans avertissements ni erreurs, je ne pense pas qu'il y ait vraiment une distinction formelle là-bas. La distinction que je peux penser de ce qui pourrait être pertinent est «haut niveau» et «bas niveau». Des langages comme Java et C# High Level (plus loin de l'assemblage) éliminent généralement la possibilité de commencer à référencer les déchets pour des raisons évidentes. Les langages de niveau inférieur (proche de l'assemblage) ne sont pas simplement destinés à le laisser ouvert au développeur (ceci est similaire à la gestion de la mémoire). La mémoire non définie est normalement appelée inutilisée, poubelle ou mémoire libérée.

+0

OK, mais je veux ajouter la mémoire "non initialisée" cette classification ... elle est allouée mais pas initialisée – JoelFan

+0

Je crois que Falaina vous a battu à ce coup de poing ... – TahoeWolverine

4

Vous savez, j'ai toujours utilisé le terme Memory Safety pour discuter de ces sujets. Et je considère C/C++ "Memory Unsafe" langues. Je ne sais pas si c'est la terminologie acceptée, alors je serai intéressé à voir d'autres réponses.

En ce qui concerne les termes de « mémoire non définie », je crois que ce terme serait une combinaison de 2 autres termes:

mémoire non allouée: mémoire qui n'a pas été mis de côté pour une utilisation par un programme. Mémoire non initialisée: mémoire qui a été allouée mais n'a pas reçu de valeur significative par le programme.

Questions connexes