Occupation en memoire d une variable ? [Résolu]

Signaler
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020
-
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020
-
Slu



comment peut on connaitre, dans vb6, la taille d une variable en memoire ?



thx @+

Herve

21 réponses

Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Boolean,
System.Boolean,
2 octets,
True ou False.,
----

Byte,
System.Byte,
1 octet,
0 à 255 (non signés).,
----

Char,
System.Char,
2 octets,
0 à 65 535 (non signés).,
----

Date,
System.DateTime,
8 octets,
0:00:00 le 1er janvier 0001 à 23:59:59 le 31 décembre 9999.,
----

Decimal,
System.Decimal,
16 octets,
0 à +/-79 228 162 514 264 337 593 543 950 335 sans décimale ; 0 à +/-7,9228162514264337593543950335 avec 28 décimales ; le plus petit nombre différent de zéro étant +/-0,0000000000000000000000000001 (+/-1E-28).,
----

Double
(virgule flottante à double précision),
System.Double,
8 octets,
-1,79769313486231E+308 à
-4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486231E+308 pour les valeurs positives.,
----

Integer,
System.Int32,
4 octets,
-2 147 483 648 à 2 147 483 647.,
----

Long
(entier de type Long),
System.Int64,
8 octets,
-9 223 372 036 854 775 808 à 9 223 372 036 854 775 807.,
----

Object,
System.Object (classe),
4 octets,
N'importe quel type peut être stocké dans une variable de type Object.,
----

Short,
System.Int16,
2 octets,
-32 768 à 32 767.,
----

Single
(virgule flottante en simple précision),
System.Single,
4 octets,
-3,402823E+38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E+38 pour les valeurs positives.,
----

String
(longueur variable),
System.String (classe),
Dépend de la plate-forme d'implémentation,
0 à environ 2 milliards de caractères Unicode.,
----

User-Defined Type
(structure),
(hérite de System.ValueType),
Dépend de la plate-forme d'implémentation,
Chaque membre de la structure présente une plage déterminée par son type de données et qui est indépendante des plages des autres membres.

Ce tableau viens du .Net mais normalement les tailles sont les mêmes en VB6

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Salut, les taille de variables sont fixée en fonction de leur type, ainsi le type Byte est le plus petit


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Merci de comble mon petit trou de memoire !



mais il n y a pas une fonction permettant de le recuperer ?

par exemple pour un string ou pour un tableau de structure ....


Herve
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Je ne pense pas que cela soit possible en VB6, sauf peut-être en utilisant un API.
je crois qu'en regardant dans le gestionnaire de tâche tu peux avoir la qté ram used


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

merci ...

une derniere question ... est ce que l on peut limiter un string en longueur lors de la declaration .?

Herve
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
non malheureusement les tailles indiqué sont les tailles minimum, exemple : Dim toto as Byte occupe 1octet
mais : dim Toto(9) as byte occupe 10 octets.


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

ok merci .

Herve
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Salut,

A la question : "est ce que l on peut limiter un string en longueur lors de la declaration ?"

Oui ! par exemple :

=

Dim mystring As String * 3
mystring = "Us est le meilleur ! Merci les fleurs..."
MsgBox mystring 'renvoi "Us "

=

Amicalement,
Us.
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Ahhh merci ..... j avais essaye

Dim mystring[3] As String
et

Dim mystring(3) As String



thx @+


Herve
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Une quetion me viens donc à l'esprit : Est-ce que "Dim mystring As String * 3" réduit la qté mémoire utiliser ou utilise t'il autant de mémoire que d'habitude ?


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

l occupation en memoire d un string depend de la longueur du string ...
donc si on limite la longueur cela limite l occupation en memoire

Herve
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Terrible !!
Mais lorsque l'on fait un simple 'Dim toto as string' quelle est sa qté mem used ? car d'après mon tableau MSDN note 'selon la plateforme' c'est bien gentil de MSSoft mais il pourrait au moins fournir les infos complète.


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

oui c vrai ... d ailleur j arrive jamais a retrouve le tableau (que tu as mis) dans MSDN !

a mon avais il ne vaut pas grand chose ... vu que la chaine est vide au moment de la declaration.

Herve
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Salut,

D'après mes souvenirs 'Dim toto as string' configure toto à environ 32700 octects, d'entré de jeu... Sinon après, si toto contient plus, allocation se fait dynamiquement... à confirmer. Enfin, une string de 32Ko, on commence déjà à écrire beaucoup, et pour toto se rappeler tout ça, c'est pas gagné... :-);

Amicalement,
Us.
Messages postés
572
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
4 mai 2020

Je vient de tester un truc ...

la fonction Len permet de voire l occupation en memoire d une variable ...



Avec un integer -> 2 octets

Long -> 4 octects



pas vraiment ce que le tableau dit !

Herve
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
J'ai essayé la même fonction sous les différente version de VB.

dim toto as integer

sous VB6 : 2o
sous VB2003 : 4o
sous VB2005 : 4o

Mais sous VB2003 on peux revenir à un 2o en utilisant ceci :
Dim toto as int16 '2 octets
Dim toto as int32 '4 octets
Dim toto as int64 '8 octets

Je n'ai pas trouver la même chose sous VB2005, il n'y a que integer donc un 4octets d'office !

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Correction les int16,32 et 64 sont également dispo sous 2005 j'avais pas regarder dans les procédure 'All' et non 'Common'


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
Len ! non LenB !

Amicalement,
Us.
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
15
Autant pour moi, mais j'ai fait les test et les résultats sont les mêmes ;)


Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]&
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Dim s As String occupe juste les 4 octets du pointeur BSTR*, il vaut 0 à sa déclaration donc n'occupe que ses 4 octets.
Ensuite quand vous insérez des caractères dedans, alloc d''une struct BSTR (8 octets) + les données à l'offset [BSTR* + 4].
Simple, non ?

ciao...
BruNews, MVP VC++