Bonjour,

J'ai une incompréhension dans la manière dont la mémoire se comporte, ou pour les règles des tableaux à deux dimensions,
ou ??
Voici

PC en windows 10 en 64bits mémoire 8,00 Go
Visual Studio 2017

Je crée une application où je dois charger un grand nombre de données en mémoire et les traiter.
Il s'agit en réalité d'un process LCS ( Longest Common Subsequence ) qui s'applique non pas à des chaînes de caractères, mais à des fichiers ; d'où le chargement en mémoire.

Dans une application x64, je définit mon tableau ainsi

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 lmax = 40000
 rmax = 40000
 Dim LCS(lmax + 1 , rmax + 1 ) as integer
J'ai un message erreur

Une exception non gérée du type 'System.OutOfMemoryException' s'est
produite dans LCS.exe
Informations supplémentaires*: Les dimensions du tableau dépassent la
plage prise en charge.
Mais, et c'est là où c'est curieux, si je code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 lmax = 20000
 rmax = 20000
 Dim LCS(lmax + 1, rmax + 1) As Integer
 '
 Dim LCS3(20000 + 1, 20000 + 1) As Integer
 Dim LCS4(20000 + 1, 20000 + 1) As Integer
 Dim LCS5(20000 + 1, 20000 + 1) As Integer

Je n'ai pas de problème d'allocation.
En termes de mémoire, et si je ne trompe pas, les deux sont équivalents.

Information supplémentaire : après l'exécution du dernier code, je suis à 83% de mémoire avec quelques autres applications ouvertes et qui forcément consomment aussi.

Une idée

Merci

Pierre