OVH Cloud OVH Cloud

comment allouer de la mémoire en VB

10 réponses
Avatar
Long YE-SU
Je voudrais savoir comment allouer de la mémoire en VB
de façon dynamique (comme en langage C avec l'intrustion malloc )

Sincères salutations
Long YE-SU

10 réponses

Avatar
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 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
Avatar
Long YE-SU
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




Avatar
Patrice Henrio
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








Avatar
Long YE-SU
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
>>
>>
>
>




Avatar
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
Avatar
Patrice Henrio
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 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
>>
>>
>
>








Avatar
Patrice Henrio
désolé François, ma réponse fait double emploi avec la tienne, je ne l'avais
pas vue.


"Picalausa François" a écrit dans le message de news:
%
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



Avatar
Picalausa François
"Patrice Henrio" a écrit dans le message de
news: %236$A$
désolé François, ma réponse fait double emploi avec la tienne, je ne
l'avais pas vue.



La... la.. C'EN EST DE TROP! Comment oses-tu?</sarcastique>

Il n'y a pas de mal : ça m'a permi de confirmer que je ne disais pas de
bêtises :-)

--
Picalausa François

PS: Pour le tag ouvrant <sarcastique>, employer le write approprié
Avatar
Long YE-SU
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 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
>> >>
>> >>
>> >
>> >
>>
>>
>
>




Avatar
Long YE-SU
oups je retire ma question précédente car dans l'exemple
du code source , la réponse est dedans ...

Merci
Je vais essayer ce morceau de programme

Salutations
Long YE-SU


"Long YE-SU" a écrit dans le message de news:
44c087f9$0$868$
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


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
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>