4 votes

Sqlite 3.7.10 et liaison statique dans Delphi

La dernière version de Sqlite (3.7.10) voulait lier la fonction __msize et comme le gestionnaire de mémoire de Delphi ne peut pas rapporter la taille d'un bloc de mémoire, j'ai dû introduire un hack (compatible d5)

function __msize(p: pointer): Cardinal;cdecl;
begin
  Result:=PInteger(integer(p)-4)^-6;
end;

Existe-t-il d'autres solutions à l'intérieur de Sqlite (définit ?) ou de Delphi pour résoudre ce problème afin qu'aucune fonctionnalité non documentée ne soit utilisée.

8voto

Arnaud Bouchez Points 25855

Autour de la ligne # 15195 du code source, commentez les lignes suivantes :

/*
** Windows systems have malloc_usable_size() but it is called _msize()
*/
#if !defined(HAVE_MALLOC_USABLE_SIZE) && SQLITE_OS_WIN
# define HAVE_MALLOC_USABLE_SIZE 1
# define malloc_usable_size _msize
#endif

en

/*
** Windows systems have malloc_usable_size() but it is called _msize()
#if !defined(HAVE_MALLOC_USABLE_SIZE) && SQLITE_OS_WIN
# define HAVE_MALLOC_USABLE_SIZE 1
# define malloc_usable_size _msize
#endif
*/

Il désactivera la réutilisation de la mémoire de SQLite3 malloc, et s'appuiera sur la meilleure implémentation de FastMM4 reallocmem().

Voir cet engagement Par exemple, pour notre implémentation Open Source de la liaison statique SQLite3.

Informations complémentaires :

Je pense que nous nous débarrasserons de ce problème dans la version 3.7.11, comme indiqué ci-dessous. par cet engagement : un nouveau SQLITE_WITHOUT_MSIZE sera ajouté, et il sera possible de construire le code source de l'amalgame sans en modifier le contenu, simplement en définissant le symbole global approprié SQLITE_WITHOUT_MSIZE définir. En attendant, le plus simple est de commenter les lignes ci-dessus.

2voto

Martin Points 21

Vous pouvez utiliser SizeOfMem à partir du JCL JclSysUtils unité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X