Je voudrais savoir comment allouer de la mémoire en VB
de façon dynamique (comme en langage C avec l'intrustion malloc )
Je voudrais savoir comment allouer de la mémoire en VB
de façon dynamique (comme en langage C avec l'intrustion malloc )
Je voudrais savoir comment allouer de la mémoire en VB
de façon dynamique (comme en langage C avec l'intrustion malloc )
"Long YE-SU" a écrit dans le message de news:
44bbbcb7$0$865$
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
passages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bbbcb7$0$865$ba4acef3@news.orange.fr...
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
passages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
"Long YE-SU" a écrit dans le message de news:
44bbbcb7$0$865$
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
passages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
taille
moi je voudrais allouer autant que la RAM en dispose ...
Salutations
Long YE-SU
"Picalausa François" a écrit dans le message de
news:"Long YE-SU" a écrit dans le message de news:
44bbbcb7$0$865$
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
despassages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
taille
moi je voudrais allouer autant que la RAM en dispose ...
Salutations
Long YE-SU
"Picalausa François" <fpicalausa@chez.com> a écrit dans le message de
news:
un5QpKcqGHA.5012@TK2MSFTNGP03.phx.gbl...
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bbbcb7$0$865$ba4acef3@news.orange.fr...
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
des
passages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
taille
moi je voudrais allouer autant que la RAM en dispose ...
Salutations
Long YE-SU
"Picalausa François" a écrit dans le message de
news:"Long YE-SU" a écrit dans le message de news:
44bbbcb7$0$865$
> Je voudrais savoir comment allouer de la mémoire en VB
> de façon dynamique (comme en langage C avec l'intrustion malloc )
Hello,
Si tu as des données de structures fixes, à l'aide de tableau de Type
personnalisés. Après c'est un jeu de redim/redim preserve/erase.
Tu peux aussi employer des chaines de caractères de taille variable:
Dim Buffer As String
Buffer = String$(256, vbNullChar)
T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
despassages aux API qui demandent un pointeur vers la zone mémoire et pas un
pointeur de pointeur)
Pour certains besoins très spécifiques, tu peux employer les API de
management mémoire de Windows:
HeapCreate, HeapAlloc, HeadDestroy, HeapFree
Pour en savoir plus:
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
(faire gaffe aux memory leaks!)
<private joke>remarque, plutôt que d'y aller à coup de copy memory pour
ensuite retrouver les données, on peut encore mapper un safearray sur la
zone et utiliser dynamiquement les informations ;-)</private joke>
--
Picalausa François
Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" a écrit dans le message de news:
44bbc69a$0$851$
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" a écrit dans le message de
> news:
>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbbcb7$0$865$
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bbc69a$0$851$ba4acef3@news.orange.fr...
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" <fpicalausa@chez.com> a écrit dans le message de
> news:
> un5QpKcqGHA.5012@TK2MSFTNGP03.phx.gbl...
>> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
>> 44bbbcb7$0$865$ba4acef3@news.orange.fr...
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" a écrit dans le message de news:
44bbc69a$0$851$
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535 en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" a écrit dans le message de
> news:
>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbbcb7$0$865$
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" a écrit dans le message de
news:Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" a écrit dans le message de news:
44bbc69a$0$851$
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
> en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" a écrit dans le message de
> news:
>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbbcb7$0$865$
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
un>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
la>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news: OurGHXcqGHA.3484@TK2MSFTNGP04.phx.gbl...
Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bbc69a$0$851$ba4acef3@news.orange.fr...
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
> en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" <fpicalausa@chez.com> a écrit dans le message de
> news:
> un5QpKcqGHA.5012@TK2MSFTNGP03.phx.gbl...
>> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
>> 44bbbcb7$0$865$ba4acef3@news.orange.fr...
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
un
>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
la
>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
est ce que je peux faire
redim TABLE( 190 000 )
et comment connaître la taille de la RAM disponible de mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" a écrit dans le message de
news:Non avec le redim on va aussi loin que le permet la mémoire. Par exemple
j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
"Long YE-SU" a écrit dans le message de news:
44bbc69a$0$851$
> oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
> en
> taille
>
> moi je voudrais allouer autant que la RAM en dispose ...
>
> Salutations
> Long YE-SU
>
>
> "Picalausa François" a écrit dans le message de
> news:
>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbbcb7$0$865$
>> > Je voudrais savoir comment allouer de la mémoire en VB
>> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>>
>> Hello,
>>
>> Si tu as des données de structures fixes, à l'aide de tableau de Type
>> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>>
>> Tu peux aussi employer des chaines de caractères de taille variable:
>> Dim Buffer As String
>> Buffer = String$(256, vbNullChar)
>> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> lors
> des
>> passages aux API qui demandent un pointeur vers la zone mémoire et pas
un>> pointeur de pointeur)
>>
>> Pour certains besoins très spécifiques, tu peux employer les API de
>> management mémoire de Windows:
>> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> Pour en savoir plus:
>>
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp>> (faire gaffe aux memory leaks!)
>>
>> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> pour
>> ensuite retrouver les données, on peut encore mapper un safearray sur
la>> zone et utiliser dynamiquement les informations ;-)</private joke>
>>
>> --
>> Picalausa François
>>
>>
>
>
Hello,
"Long YE-SU" a écrit dans le message de news:
44bfb749$0$847$je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
Essaye par toi même, mais je ne constate personellement pas ce genre de
limites (demander le 120000 élément est tout à fait possible).
Par contre, il est fort possible qu'il n'accepte au plus que 2Go (valeur
max d'un Long) ou 4Go (Long signé, qui est une limite pour certaines des
API windows qui travaillent sur 32 bits).est ce que je peux faire
redim TABLE( 190 000 )
oui... enfin non... mais oui!
Qu'est ce que TABLE?
S'il s'agit de
byte -> 190 000 octets (190 KB ou 185 KiB) ne devraient pas poser problème
double -> 190 000 * 8 octets (1520000 B - 1,52 MB ou à peu près 1,44496
MiB) ne devraient pas poser de problèmes
type quelconque de 10000 octet par instance -> 1900000000 octets (1,9GB ou
à peu près 1,76951 GiB) ou il risque d'y avoir "quelques" problèmes
(genre : erreur d'exécution 7 : Mémoire insuffisante).et comment connaître la taille de la RAM disponible de mon PC ?
Comme ceci par exemple:
Option Explicit
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus _
Lib "Kernel32" _
( _
lpBuffer As MEMORYSTATUS _
)
Private Function SizeToHumanReadableSize(Size As Variant) As String
Const MaxName As Long = 8
Dim i As Long
Dim SizeName(MaxName - 1) As String
Dim TempSize As Double
SizeName(0) = "bytes"
SizeName(1) = "KiB"
SizeName(2) = "MiB"
SizeName(3) = "GiB"
SizeName(4) = "TiB"
SizeName(5) = "PiB"
SizeName(6) = "EiB"
SizeName(7) = "ZiB"
TempSize = Size
i = 0
While (TempSize > 1024 And i < MaxName)
TempSize = TempSize / 1024
i = i + 1
Wend
SizeToHumanReadableSizePow2 = Round(TempSize, 2) & " " & SizeName(i)
End Function
Private Sub Form_Load()
Dim MemSta As MEMORYSTATUS
GlobalMemoryStatus MemSta
Debug.Print "Total virt : " &
SizeToHumanReadableSize(MemSta.dwTotalVirtual)
Debug.Print "Total phys : " &
SizeToHumanReadableSize(MemSta.dwTotalPhys)
Debug.Print "Avail virt : " &
SizeToHumanReadableSize(MemSta.dwAvailVirtual)
Debug.Print "Avail phys : " &
SizeToHumanReadableSize(MemSta.dwAvailPhys)
End Sub
Mais rassure moi, c'est juste pour connaitre la taille limite que tu ne
peux pas dépasser et pas pour remplir la mémoire avec un maximum
d'occurences?
Peux-tu détailler dans quel cadre tu as besoin d'autant de mémoire? il y a
peut être d'autres solutions?
--
Picalausa François
Hello,
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bfb749$0$847$ba4acef3@news.orange.fr...
je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
Essaye par toi même, mais je ne constate personellement pas ce genre de
limites (demander le 120000 élément est tout à fait possible).
Par contre, il est fort possible qu'il n'accepte au plus que 2Go (valeur
max d'un Long) ou 4Go (Long signé, qui est une limite pour certaines des
API windows qui travaillent sur 32 bits).
est ce que je peux faire
redim TABLE( 190 000 )
oui... enfin non... mais oui!
Qu'est ce que TABLE?
S'il s'agit de
byte -> 190 000 octets (190 KB ou 185 KiB) ne devraient pas poser problème
double -> 190 000 * 8 octets (1520000 B - 1,52 MB ou à peu près 1,44496
MiB) ne devraient pas poser de problèmes
type quelconque de 10000 octet par instance -> 1900000000 octets (1,9GB ou
à peu près 1,76951 GiB) ou il risque d'y avoir "quelques" problèmes
(genre : erreur d'exécution 7 : Mémoire insuffisante).
et comment connaître la taille de la RAM disponible de mon PC ?
Comme ceci par exemple:
Option Explicit
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus _
Lib "Kernel32" _
( _
lpBuffer As MEMORYSTATUS _
)
Private Function SizeToHumanReadableSize(Size As Variant) As String
Const MaxName As Long = 8
Dim i As Long
Dim SizeName(MaxName - 1) As String
Dim TempSize As Double
SizeName(0) = "bytes"
SizeName(1) = "KiB"
SizeName(2) = "MiB"
SizeName(3) = "GiB"
SizeName(4) = "TiB"
SizeName(5) = "PiB"
SizeName(6) = "EiB"
SizeName(7) = "ZiB"
TempSize = Size
i = 0
While (TempSize > 1024 And i < MaxName)
TempSize = TempSize / 1024
i = i + 1
Wend
SizeToHumanReadableSizePow2 = Round(TempSize, 2) & " " & SizeName(i)
End Function
Private Sub Form_Load()
Dim MemSta As MEMORYSTATUS
GlobalMemoryStatus MemSta
Debug.Print "Total virt : " &
SizeToHumanReadableSize(MemSta.dwTotalVirtual)
Debug.Print "Total phys : " &
SizeToHumanReadableSize(MemSta.dwTotalPhys)
Debug.Print "Avail virt : " &
SizeToHumanReadableSize(MemSta.dwAvailVirtual)
Debug.Print "Avail phys : " &
SizeToHumanReadableSize(MemSta.dwAvailPhys)
End Sub
Mais rassure moi, c'est juste pour connaitre la taille limite que tu ne
peux pas dépasser et pas pour remplir la mémoire avec un maximum
d'occurences?
Peux-tu détailler dans quel cadre tu as besoin d'autant de mémoire? il y a
peut être d'autres solutions?
--
Picalausa François
Hello,
"Long YE-SU" a écrit dans le message de news:
44bfb749$0$847$je croyais qu'avec un redim , on ne pouvait pas depasser 65535
si j'ai une table :
TABLE( 0 to 65535)
Essaye par toi même, mais je ne constate personellement pas ce genre de
limites (demander le 120000 élément est tout à fait possible).
Par contre, il est fort possible qu'il n'accepte au plus que 2Go (valeur
max d'un Long) ou 4Go (Long signé, qui est une limite pour certaines des
API windows qui travaillent sur 32 bits).est ce que je peux faire
redim TABLE( 190 000 )
oui... enfin non... mais oui!
Qu'est ce que TABLE?
S'il s'agit de
byte -> 190 000 octets (190 KB ou 185 KiB) ne devraient pas poser problème
double -> 190 000 * 8 octets (1520000 B - 1,52 MB ou à peu près 1,44496
MiB) ne devraient pas poser de problèmes
type quelconque de 10000 octet par instance -> 1900000000 octets (1,9GB ou
à peu près 1,76951 GiB) ou il risque d'y avoir "quelques" problèmes
(genre : erreur d'exécution 7 : Mémoire insuffisante).et comment connaître la taille de la RAM disponible de mon PC ?
Comme ceci par exemple:
Option Explicit
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus _
Lib "Kernel32" _
( _
lpBuffer As MEMORYSTATUS _
)
Private Function SizeToHumanReadableSize(Size As Variant) As String
Const MaxName As Long = 8
Dim i As Long
Dim SizeName(MaxName - 1) As String
Dim TempSize As Double
SizeName(0) = "bytes"
SizeName(1) = "KiB"
SizeName(2) = "MiB"
SizeName(3) = "GiB"
SizeName(4) = "TiB"
SizeName(5) = "PiB"
SizeName(6) = "EiB"
SizeName(7) = "ZiB"
TempSize = Size
i = 0
While (TempSize > 1024 And i < MaxName)
TempSize = TempSize / 1024
i = i + 1
Wend
SizeToHumanReadableSizePow2 = Round(TempSize, 2) & " " & SizeName(i)
End Function
Private Sub Form_Load()
Dim MemSta As MEMORYSTATUS
GlobalMemoryStatus MemSta
Debug.Print "Total virt : " &
SizeToHumanReadableSize(MemSta.dwTotalVirtual)
Debug.Print "Total phys : " &
SizeToHumanReadableSize(MemSta.dwTotalPhys)
Debug.Print "Avail virt : " &
SizeToHumanReadableSize(MemSta.dwAvailVirtual)
Debug.Print "Avail phys : " &
SizeToHumanReadableSize(MemSta.dwAvailPhys)
End Sub
Mais rassure moi, c'est juste pour connaitre la taille limite que tu ne
peux pas dépasser et pas pour remplir la mémoire avec un maximum
d'occurences?
Peux-tu détailler dans quel cadre tu as besoin d'autant de mémoire? il y a
peut être d'autres solutions?
--
Picalausa François
désolé François, ma réponse fait double emploi avec la tienne, je ne
l'avais pas vue.
désolé François, ma réponse fait double emploi avec la tienne, je ne
l'avais pas vue.
désolé François, ma réponse fait double emploi avec la tienne, je ne
l'avais pas vue.
Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
dimension (je laisse de côté les tableaux dynamiques à plusieurs
donc TABLE() as UserType par exemple
on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
190 000) à condition bien sûr que la taille mémoire le supporte.
Dans une form1, un Button Command1 et le code ci-dessous
Option Explicit
Private Type UType
Ch1(1 To 100) As Double
End Type
Private Table() As UType
Private Sub Command1_Click()
ReDim Table(0 To 500)
MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
End Sub
Ce sont les objets qui ne peuvent dépasser 65535 octets.
Pour la mémoire, il s'agit de l'API
GlobalMemoryStatus
Utilisation ci-dessous
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long 'mémoire physique totale en octets
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
MEMORYSTATUS)
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail:
Dim MemStat As MEMORYSTATUS
'retrieve the memory status
GlobalMemoryStatus MemStat
MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
memory."
End Sub
"Long YE-SU" a écrit dans le message de news:
44bfb749$0$847$
> je croyais qu'avec un redim , on ne pouvait pas depasser 65535
>
> si j'ai une table :
>
> TABLE( 0 to 65535)
>
> est ce que je peux faire
>
> redim TABLE( 190 000 )
>
> et comment connaître la taille de la RAM disponible de mon PC ?
>
> Salutations
> Long YE-SU
>
>
>
>
> "Patrice Henrio" a écrit dans le message de
> news:
>> Non avec le redim on va aussi loin que le permet la mémoire. Par
>> j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
>>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbc69a$0$851$
>> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
>> > en
>> > taille
>> >
>> > moi je voudrais allouer autant que la RAM en dispose ...
>> >
>> > Salutations
>> > Long YE-SU
>> >
>> >
>> > "Picalausa François" a écrit dans le message de
>> > news:
>> >
>> >> "Long YE-SU" a écrit dans le message de news:
>> >> 44bbbcb7$0$865$
>> >> > Je voudrais savoir comment allouer de la mémoire en VB
>> >> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>> >>
>> >> Hello,
>> >>
>> >> Si tu as des données de structures fixes, à l'aide de tableau de
>> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>> >>
>> >> Tu peux aussi employer des chaines de caractères de taille variable:
>> >> Dim Buffer As String
>> >> Buffer = String$(256, vbNullChar)
>> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> >> lors
>> > des
>> >> passages aux API qui demandent un pointeur vers la zone mémoire et
> un
>> >> pointeur de pointeur)
>> >>
>> >> Pour certains besoins très spécifiques, tu peux employer les API de
>> >> management mémoire de Windows:
>> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> >> Pour en savoir plus:
>> >>
>
>> >> (faire gaffe aux memory leaks!)
>> >>
>> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> >> pour
>> >> ensuite retrouver les données, on peut encore mapper un safearray
> la
>> >> zone et utiliser dynamiquement les informations ;-)</private joke>
>> >>
>> >> --
>> >> Picalausa François
>> >>
>> >>
>> >
>> >
>>
>>
>
>
Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
dimension (je laisse de côté les tableaux dynamiques à plusieurs
donc TABLE() as UserType par exemple
on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
190 000) à condition bien sûr que la taille mémoire le supporte.
Dans une form1, un Button Command1 et le code ci-dessous
Option Explicit
Private Type UType
Ch1(1 To 100) As Double
End Type
Private Table() As UType
Private Sub Command1_Click()
ReDim Table(0 To 500)
MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
End Sub
Ce sont les objets qui ne peuvent dépasser 65535 octets.
Pour la mémoire, il s'agit de l'API
GlobalMemoryStatus
Utilisation ci-dessous
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long 'mémoire physique totale en octets
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
MEMORYSTATUS)
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim MemStat As MEMORYSTATUS
'retrieve the memory status
GlobalMemoryStatus MemStat
MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
memory."
End Sub
"Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
44bfb749$0$847$ba4acef3@news.orange.fr...
> je croyais qu'avec un redim , on ne pouvait pas depasser 65535
>
> si j'ai une table :
>
> TABLE( 0 to 65535)
>
> est ce que je peux faire
>
> redim TABLE( 190 000 )
>
> et comment connaître la taille de la RAM disponible de mon PC ?
>
> Salutations
> Long YE-SU
>
>
>
>
> "Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
> news: OurGHXcqGHA.3484@TK2MSFTNGP04.phx.gbl...
>> Non avec le redim on va aussi loin que le permet la mémoire. Par
>> j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
>>
>> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
>> 44bbc69a$0$851$ba4acef3@news.orange.fr...
>> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
>> > en
>> > taille
>> >
>> > moi je voudrais allouer autant que la RAM en dispose ...
>> >
>> > Salutations
>> > Long YE-SU
>> >
>> >
>> > "Picalausa François" <fpicalausa@chez.com> a écrit dans le message de
>> > news:
>> > un5QpKcqGHA.5012@TK2MSFTNGP03.phx.gbl...
>> >> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
>> >> 44bbbcb7$0$865$ba4acef3@news.orange.fr...
>> >> > Je voudrais savoir comment allouer de la mémoire en VB
>> >> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>> >>
>> >> Hello,
>> >>
>> >> Si tu as des données de structures fixes, à l'aide de tableau de
>> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>> >>
>> >> Tu peux aussi employer des chaines de caractères de taille variable:
>> >> Dim Buffer As String
>> >> Buffer = String$(256, vbNullChar)
>> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> >> lors
>> > des
>> >> passages aux API qui demandent un pointeur vers la zone mémoire et
> un
>> >> pointeur de pointeur)
>> >>
>> >> Pour certains besoins très spécifiques, tu peux employer les API de
>> >> management mémoire de Windows:
>> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> >> Pour en savoir plus:
>> >>
>
>> >> (faire gaffe aux memory leaks!)
>> >>
>> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> >> pour
>> >> ensuite retrouver les données, on peut encore mapper un safearray
> la
>> >> zone et utiliser dynamiquement les informations ;-)</private joke>
>> >>
>> >> --
>> >> Picalausa François
>> >>
>> >>
>> >
>> >
>>
>>
>
>
Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
dimension (je laisse de côté les tableaux dynamiques à plusieurs
donc TABLE() as UserType par exemple
on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
190 000) à condition bien sûr que la taille mémoire le supporte.
Dans une form1, un Button Command1 et le code ci-dessous
Option Explicit
Private Type UType
Ch1(1 To 100) As Double
End Type
Private Table() As UType
Private Sub Command1_Click()
ReDim Table(0 To 500)
MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
End Sub
Ce sont les objets qui ne peuvent dépasser 65535 octets.
Pour la mémoire, il s'agit de l'API
GlobalMemoryStatus
Utilisation ci-dessous
Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long 'mémoire physique totale en octets
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
MEMORYSTATUS)
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail:
Dim MemStat As MEMORYSTATUS
'retrieve the memory status
GlobalMemoryStatus MemStat
MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
memory."
End Sub
"Long YE-SU" a écrit dans le message de news:
44bfb749$0$847$
> je croyais qu'avec un redim , on ne pouvait pas depasser 65535
>
> si j'ai une table :
>
> TABLE( 0 to 65535)
>
> est ce que je peux faire
>
> redim TABLE( 190 000 )
>
> et comment connaître la taille de la RAM disponible de mon PC ?
>
> Salutations
> Long YE-SU
>
>
>
>
> "Patrice Henrio" a écrit dans le message de
> news:
>> Non avec le redim on va aussi loin que le permet la mémoire. Par
>> j'utilise un redim pour lire en une fois un tableau de 800*100 octets.
>>
>> "Long YE-SU" a écrit dans le message de news:
>> 44bbc69a$0$851$
>> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser 65535
>> > en
>> > taille
>> >
>> > moi je voudrais allouer autant que la RAM en dispose ...
>> >
>> > Salutations
>> > Long YE-SU
>> >
>> >
>> > "Picalausa François" a écrit dans le message de
>> > news:
>> >
>> >> "Long YE-SU" a écrit dans le message de news:
>> >> 44bbbcb7$0$865$
>> >> > Je voudrais savoir comment allouer de la mémoire en VB
>> >> > de façon dynamique (comme en langage C avec l'intrustion malloc )
>> >>
>> >> Hello,
>> >>
>> >> Si tu as des données de structures fixes, à l'aide de tableau de
>> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
>> >>
>> >> Tu peux aussi employer des chaines de caractères de taille variable:
>> >> Dim Buffer As String
>> >> Buffer = String$(256, vbNullChar)
>> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
>> >> lors
>> > des
>> >> passages aux API qui demandent un pointeur vers la zone mémoire et
> un
>> >> pointeur de pointeur)
>> >>
>> >> Pour certains besoins très spécifiques, tu peux employer les API de
>> >> management mémoire de Windows:
>> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
>> >> Pour en savoir plus:
>> >>
>
>> >> (faire gaffe aux memory leaks!)
>> >>
>> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
>> >> pour
>> >> ensuite retrouver les données, on peut encore mapper un safearray
> la
>> >> zone et utiliser dynamiquement les informations ;-)</private joke>
>> >>
>> >> --
>> >> Picalausa François
>> >>
>> >>
>> >
>> >
>>
>>
>
>
mais comment savoir la place mémoire qu'il me reste sur mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" a écrit dans le message de
news:
> Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
> dimension (je laisse de côté les tableaux dynamiques à plusieurs
dimensions)
> donc TABLE() as UserType par exemple
>
> on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
to
> 190 000) à condition bien sûr que la taille mémoire le supporte.
>
> Dans une form1, un Button Command1 et le code ci-dessous
>
>
> Option Explicit
> Private Type UType
> Ch1(1 To 100) As Double
> End Type
> Private Table() As UType
>
>
> Private Sub Command1_Click()
> ReDim Table(0 To 500)
> MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
> End Sub
>
> Ce sont les objets qui ne peuvent dépasser 65535 octets.
>
>
> Pour la mémoire, il s'agit de l'API
> GlobalMemoryStatus
> Utilisation ci-dessous
> Private Type MEMORYSTATUS
> dwLength As Long
> dwMemoryLoad As Long
> dwTotalPhys As Long 'mémoire physique totale en octets
> dwAvailPhys As Long
> dwTotalPageFile As Long
> dwAvailPageFile As Long
> dwTotalVirtual As Long
> dwAvailVirtual As Long
> End Type
>
> Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
> MEMORYSTATUS)
> Private Sub Form_Load()
> 'KPD-Team 1998
> 'URL: http://www.allapi.net/
> 'E-Mail:
> Dim MemStat As MEMORYSTATUS
> 'retrieve the memory status
> GlobalMemoryStatus MemStat
> MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
> and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
> memory."
> End Sub
>
>
> "Long YE-SU" a écrit dans le message de news:
> 44bfb749$0$847$
> > je croyais qu'avec un redim , on ne pouvait pas depasser 65535
> >
> > si j'ai une table :
> >
> > TABLE( 0 to 65535)
> >
> > est ce que je peux faire
> >
> > redim TABLE( 190 000 )
> >
> > et comment connaître la taille de la RAM disponible de mon PC ?
> >
> > Salutations
> > Long YE-SU
> >
> >
> >
> >
> > "Patrice Henrio" a écrit dans le message
> > news:
> >> Non avec le redim on va aussi loin que le permet la mémoire. Par
exemple
> >> j'utilise un redim pour lire en une fois un tableau de 800*100
> >>
> >> "Long YE-SU" a écrit dans le message de news:
> >> 44bbc69a$0$851$
> >> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser
> >> > en
> >> > taille
> >> >
> >> > moi je voudrais allouer autant que la RAM en dispose ...
> >> >
> >> > Salutations
> >> > Long YE-SU
> >> >
> >> >
> >> > "Picalausa François" a écrit dans le message
> >> > news:
> >> >
> >> >> "Long YE-SU" a écrit dans le message de news:
> >> >> 44bbbcb7$0$865$
> >> >> > Je voudrais savoir comment allouer de la mémoire en VB
> >> >> > de façon dynamique (comme en langage C avec l'intrustion
> >> >>
> >> >> Hello,
> >> >>
> >> >> Si tu as des données de structures fixes, à l'aide de tableau de
Type
> >> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
> >> >>
> >> >> Tu peux aussi employer des chaines de caractères de taille
> >> >> Dim Buffer As String
> >> >> Buffer = String$(256, vbNullChar)
> >> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
> >> >> lors
> >> > des
> >> >> passages aux API qui demandent un pointeur vers la zone mémoire et
pas
> > un
> >> >> pointeur de pointeur)
> >> >>
> >> >> Pour certains besoins très spécifiques, tu peux employer les API
> >> >> management mémoire de Windows:
> >> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
> >> >> Pour en savoir plus:
> >> >>
> >
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
> >> >> (faire gaffe aux memory leaks!)
> >> >>
> >> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
> >> >> pour
> >> >> ensuite retrouver les données, on peut encore mapper un safearray
sur
> > la
> >> >> zone et utiliser dynamiquement les informations ;-)</private joke>
> >> >>
> >> >> --
> >> >> Picalausa François
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>
mais comment savoir la place mémoire qu'il me reste sur mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message de
news: O3YyNZCrGHA.4812@TK2MSFTNGP04.phx.gbl...
> Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
> dimension (je laisse de côté les tableaux dynamiques à plusieurs
dimensions)
> donc TABLE() as UserType par exemple
>
> on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
to
> 190 000) à condition bien sûr que la taille mémoire le supporte.
>
> Dans une form1, un Button Command1 et le code ci-dessous
>
>
> Option Explicit
> Private Type UType
> Ch1(1 To 100) As Double
> End Type
> Private Table() As UType
>
>
> Private Sub Command1_Click()
> ReDim Table(0 To 500)
> MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
> End Sub
>
> Ce sont les objets qui ne peuvent dépasser 65535 octets.
>
>
> Pour la mémoire, il s'agit de l'API
> GlobalMemoryStatus
> Utilisation ci-dessous
> Private Type MEMORYSTATUS
> dwLength As Long
> dwMemoryLoad As Long
> dwTotalPhys As Long 'mémoire physique totale en octets
> dwAvailPhys As Long
> dwTotalPageFile As Long
> dwAvailPageFile As Long
> dwTotalVirtual As Long
> dwAvailVirtual As Long
> End Type
>
> Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
> MEMORYSTATUS)
> Private Sub Form_Load()
> 'KPD-Team 1998
> 'URL: http://www.allapi.net/
> 'E-Mail: KPDTeam@Allapi.net
> Dim MemStat As MEMORYSTATUS
> 'retrieve the memory status
> GlobalMemoryStatus MemStat
> MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
> and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
> memory."
> End Sub
>
>
> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
> 44bfb749$0$847$ba4acef3@news.orange.fr...
> > je croyais qu'avec un redim , on ne pouvait pas depasser 65535
> >
> > si j'ai une table :
> >
> > TABLE( 0 to 65535)
> >
> > est ce que je peux faire
> >
> > redim TABLE( 190 000 )
> >
> > et comment connaître la taille de la RAM disponible de mon PC ?
> >
> > Salutations
> > Long YE-SU
> >
> >
> >
> >
> > "Patrice Henrio" <patrice.henrio@laposte.net> a écrit dans le message
> > news: OurGHXcqGHA.3484@TK2MSFTNGP04.phx.gbl...
> >> Non avec le redim on va aussi loin que le permet la mémoire. Par
exemple
> >> j'utilise un redim pour lire en une fois un tableau de 800*100
> >>
> >> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
> >> 44bbc69a$0$851$ba4acef3@news.orange.fr...
> >> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser
> >> > en
> >> > taille
> >> >
> >> > moi je voudrais allouer autant que la RAM en dispose ...
> >> >
> >> > Salutations
> >> > Long YE-SU
> >> >
> >> >
> >> > "Picalausa François" <fpicalausa@chez.com> a écrit dans le message
> >> > news:
> >> > un5QpKcqGHA.5012@TK2MSFTNGP03.phx.gbl...
> >> >> "Long YE-SU" <ye-su@sdsi.fr> a écrit dans le message de news:
> >> >> 44bbbcb7$0$865$ba4acef3@news.orange.fr...
> >> >> > Je voudrais savoir comment allouer de la mémoire en VB
> >> >> > de façon dynamique (comme en langage C avec l'intrustion
> >> >>
> >> >> Hello,
> >> >>
> >> >> Si tu as des données de structures fixes, à l'aide de tableau de
Type
> >> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
> >> >>
> >> >> Tu peux aussi employer des chaines de caractères de taille
> >> >> Dim Buffer As String
> >> >> Buffer = String$(256, vbNullChar)
> >> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
> >> >> lors
> >> > des
> >> >> passages aux API qui demandent un pointeur vers la zone mémoire et
pas
> > un
> >> >> pointeur de pointeur)
> >> >>
> >> >> Pour certains besoins très spécifiques, tu peux employer les API
> >> >> management mémoire de Windows:
> >> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
> >> >> Pour en savoir plus:
> >> >>
> >
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
> >> >> (faire gaffe aux memory leaks!)
> >> >>
> >> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
> >> >> pour
> >> >> ensuite retrouver les données, on peut encore mapper un safearray
sur
> > la
> >> >> zone et utiliser dynamiquement les informations ;-)</private joke>
> >> >>
> >> >> --
> >> >> Picalausa François
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>
mais comment savoir la place mémoire qu'il me reste sur mon PC ?
Salutations
Long YE-SU
"Patrice Henrio" a écrit dans le message de
news:
> Tout d'abord il faut que le tableau soit déclaré dynamique donc sans
> dimension (je laisse de côté les tableaux dynamiques à plusieurs
dimensions)
> donc TABLE() as UserType par exemple
>
> on pourra utiliser redim TABLE(0 to 65535) puis plus tard redim TABLE (0
to
> 190 000) à condition bien sûr que la taille mémoire le supporte.
>
> Dans une form1, un Button Command1 et le code ci-dessous
>
>
> Option Explicit
> Private Type UType
> Ch1(1 To 100) As Double
> End Type
> Private Table() As UType
>
>
> Private Sub Command1_Click()
> ReDim Table(0 To 500)
> MsgBox "taille de Table : " & Len(Table(1)) * (1+UBound(Table))
> End Sub
>
> Ce sont les objets qui ne peuvent dépasser 65535 octets.
>
>
> Pour la mémoire, il s'agit de l'API
> GlobalMemoryStatus
> Utilisation ci-dessous
> Private Type MEMORYSTATUS
> dwLength As Long
> dwMemoryLoad As Long
> dwTotalPhys As Long 'mémoire physique totale en octets
> dwAvailPhys As Long
> dwTotalPageFile As Long
> dwAvailPageFile As Long
> dwTotalVirtual As Long
> dwAvailVirtual As Long
> End Type
>
> Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
> MEMORYSTATUS)
> Private Sub Form_Load()
> 'KPD-Team 1998
> 'URL: http://www.allapi.net/
> 'E-Mail:
> Dim MemStat As MEMORYSTATUS
> 'retrieve the memory status
> GlobalMemoryStatus MemStat
> MsgBox "You have" + Str$(MemStat.dwTotalPhys / 1024) + " Kb total memory
> and" + Str$(MemStat.dwAvailPageFile / 1024) + " Kb available PageFile
> memory."
> End Sub
>
>
> "Long YE-SU" a écrit dans le message de news:
> 44bfb749$0$847$
> > je croyais qu'avec un redim , on ne pouvait pas depasser 65535
> >
> > si j'ai une table :
> >
> > TABLE( 0 to 65535)
> >
> > est ce que je peux faire
> >
> > redim TABLE( 190 000 )
> >
> > et comment connaître la taille de la RAM disponible de mon PC ?
> >
> > Salutations
> > Long YE-SU
> >
> >
> >
> >
> > "Patrice Henrio" a écrit dans le message
> > news:
> >> Non avec le redim on va aussi loin que le permet la mémoire. Par
exemple
> >> j'utilise un redim pour lire en une fois un tableau de 800*100
> >>
> >> "Long YE-SU" a écrit dans le message de news:
> >> 44bbc69a$0$851$
> >> > oui mais avec le Redim , je crois que l'on ne peut pas dépasser
> >> > en
> >> > taille
> >> >
> >> > moi je voudrais allouer autant que la RAM en dispose ...
> >> >
> >> > Salutations
> >> > Long YE-SU
> >> >
> >> >
> >> > "Picalausa François" a écrit dans le message
> >> > news:
> >> >
> >> >> "Long YE-SU" a écrit dans le message de news:
> >> >> 44bbbcb7$0$865$
> >> >> > Je voudrais savoir comment allouer de la mémoire en VB
> >> >> > de façon dynamique (comme en langage C avec l'intrustion
> >> >>
> >> >> Hello,
> >> >>
> >> >> Si tu as des données de structures fixes, à l'aide de tableau de
Type
> >> >> personnalisés. Après c'est un jeu de redim/redim preserve/erase.
> >> >>
> >> >> Tu peux aussi employer des chaines de caractères de taille
> >> >> Dim Buffer As String
> >> >> Buffer = String$(256, vbNullChar)
> >> >> T'alloue un espace mémoire de 256 octets (ne pas oublier les ByVal
> >> >> lors
> >> > des
> >> >> passages aux API qui demandent un pointeur vers la zone mémoire et
pas
> > un
> >> >> pointeur de pointeur)
> >> >>
> >> >> Pour certains besoins très spécifiques, tu peux employer les API
> >> >> management mémoire de Windows:
> >> >> HeapCreate, HeapAlloc, HeadDestroy, HeapFree
> >> >> Pour en savoir plus:
> >> >>
> >
http://msdn.microsoft.com/library/en-us/memory/base/memory_management.asp
> >> >> (faire gaffe aux memory leaks!)
> >> >>
> >> >> <private joke>remarque, plutôt que d'y aller à coup de copy memory
> >> >> pour
> >> >> ensuite retrouver les données, on peut encore mapper un safearray
sur
> > la
> >> >> zone et utiliser dynamiquement les informations ;-)</private joke>
> >> >>
> >> >> --
> >> >> Picalausa François
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>