From: drh Date: Thu, 2 Feb 2012 21:02:43 +0000 (+0000) Subject: More structure packing for smaller objects and less memory usage. X-Git-Tag: version-3.7.11~62 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3fb757b487740208dfc4d0eaf9d4841a0384155a;p=thirdparty%2Fsqlite.git More structure packing for smaller objects and less memory usage. FossilOrigin-Name: f14e7f29ff7f2d7706dc3cdd715e103e04ba0ef1 --- diff --git a/manifest b/manifest index 5598f6d7f8..a281d99024 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reduce\sthe\ssize\sof\sthe\sMemPage\sobject\sby\sabout\s32\sbytes.\s\sOther\sstructure\nsize\soptimizations. -D 2012-02-02T19:37:18.502 +C More\sstructure\spacking\sfor\ssmaller\sobjects\sand\sless\smemory\susage. +D 2012-02-02T21:02:43.362 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -242,12 +242,12 @@ F src/util.c 9e07bd67dfafe9c75b1da78c87ba030cebbb5388 F src/vacuum.c 0c0ba2242355c6048d65e2b333abe0f7c06348fa F src/vdbe.c 40b14dff04692b1ee421db40c67d4921ecf17a9d F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb -F src/vdbeInt.h 0f986e86a4a0afbf52d0402071708f487d1cfc15 +F src/vdbeInt.h 6ff4180a05683566a8835d12f7ec504b22932c82 F src/vdbeapi.c 3662b6a468a2a4605a15dfab313baa6dff81ad91 F src/vdbeaux.c 7683d772ad638faa4567142438c4594e47f173c4 F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb F src/vdbemem.c 3c171040c28a95084fb5024ab731140a86fd5439 -F src/vdbesort.c 468d43c057063e54da4f1988b38b4f46d60e7790 +F src/vdbesort.c b25814d385895544ebc8118245c8311ded7f81c9 F src/vdbetrace.c d6e50e04e1ec498150e519058f617d91b8f5c843 F src/vtab.c ab90fb600a3f5e4b7c48d22a4cdb2d6b23239847 F src/wal.c 5f7bcc0610af759953defd769eacebfd98a22bc8 @@ -989,7 +989,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P fa13edd39c3b8ec752d4e90a69ebf7fed4ebf62f -R 8221669b522416ec78d4a425d43dabd2 +P 21695c3476804477cb378b5a643196380e7e2281 +R 160b1d93d54df79cdae4b500d4010792 U drh -Z 2c59e89011b4fcade9a060969bfe0aa6 +Z a82d6bb93102b171e9f2e05fe403d0d3 diff --git a/manifest.uuid b/manifest.uuid index 2035005202..19cc6a2c65 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -21695c3476804477cb378b5a643196380e7e2281 \ No newline at end of file +f14e7f29ff7f2d7706dc3cdd715e103e04ba0ef1 \ No newline at end of file diff --git a/src/vdbeInt.h b/src/vdbeInt.h index f3f9f73a35..9c1af35c33 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -115,21 +115,21 @@ typedef struct VdbeCursor VdbeCursor; typedef struct VdbeFrame VdbeFrame; struct VdbeFrame { Vdbe *v; /* VM this frame belongs to */ - int pc; /* Program Counter in parent (calling) frame */ + VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ Op *aOp; /* Program instructions for parent frame */ - int nOp; /* Size of aOp array */ Mem *aMem; /* Array of memory cells for parent frame */ - int nMem; /* Number of entries in aMem */ u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */ - int nOnceFlag; /* Number of entries in aOnceFlag */ VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */ - u16 nCursor; /* Number of entries in apCsr */ void *token; /* Copy of SubProgram.token */ + i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ + u16 nCursor; /* Number of entries in apCsr */ + int pc; /* Program Counter in parent (calling) frame */ + int nOp; /* Size of aOp array */ + int nMem; /* Number of entries in aMem */ + int nOnceFlag; /* Number of entries in aOnceFlag */ int nChildMem; /* Number of memory cells for child frame */ int nChildCsr; /* Number of cursors for child frame */ - i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ int nChange; /* Statement changes (Vdbe.nChanges) */ - VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ }; #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) @@ -256,8 +256,8 @@ struct sqlite3_context { VdbeFunc *pVdbeFunc; /* Auxilary data, if created. */ Mem s; /* The return value is stored here */ Mem *pMem; /* Memory cell used to store aggregate context */ - int isError; /* Error code returned by the function. */ CollSeq *pColl; /* Collating sequence */ + int isError; /* Error code returned by the function. */ int skipFlag; /* Skip skip accumulator loading if true */ }; diff --git a/src/vdbesort.c b/src/vdbesort.c index c44999705b..afea1f510a 100644 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@ -93,17 +93,17 @@ typedef struct SorterRecord SorterRecord; ** being merged (rounded up to the next power of 2). */ struct VdbeSorter { + i64 iWriteOff; /* Current write offset within file pTemp1 */ + i64 iReadOff; /* Current read offset within file pTemp1 */ int nInMemory; /* Current size of pRecord list as PMA */ int nTree; /* Used size of aTree/aIter (power of 2) */ + int nPMA; /* Number of PMAs stored in pTemp1 */ + int mnPmaSize; /* Minimum PMA size, in bytes */ + int mxPmaSize; /* Maximum PMA size, in bytes. 0==no limit */ VdbeSorterIter *aIter; /* Array of iterators to merge */ int *aTree; /* Current state of incremental merge */ - i64 iWriteOff; /* Current write offset within file pTemp1 */ - i64 iReadOff; /* Current read offset within file pTemp1 */ sqlite3_file *pTemp1; /* PMA file 1 */ - int nPMA; /* Number of PMAs stored in pTemp1 */ SorterRecord *pRecord; /* Head of in-memory record list */ - int mnPmaSize; /* Minimum PMA size, in bytes */ - int mxPmaSize; /* Maximum PMA size, in bytes. 0==no limit */ UnpackedRecord *pUnpacked; /* Used to unpack keys */ }; @@ -114,10 +114,10 @@ struct VdbeSorter { struct VdbeSorterIter { i64 iReadOff; /* Current read offset */ i64 iEof; /* 1 byte past EOF for this iterator */ - sqlite3_file *pFile; /* File iterator is reading from */ int nAlloc; /* Bytes of space at aAlloc */ - u8 *aAlloc; /* Allocated space */ int nKey; /* Number of bytes in key */ + sqlite3_file *pFile; /* File iterator is reading from */ + u8 *aAlloc; /* Allocated space */ u8 *aKey; /* Pointer to current key */ };