メモリ割り当てサブシステム

2011. 02. 21
void *sqlite3_malloc(int);
void *sqlite3_realloc(void*, int);
void sqlite3_free(void*);

SQLiteのコアは、必要な全ての自身の内部メモリの割り当てに、これら3つのルーチンを使用します。

前文の『コア』は、オペレーティングシステムの特定のVFSの実装を含みません。

WindowsのVFSは、いくつかの操作にネイティブのmalloc()とfree()を使用します。

sqlite3_malloc()ルーチンは引数をNとすると、少なくとも長さがNバイトのメモリのブロックへのポインタを返します。

sqlite3_malloc()が十分な空きメモリを取得できなかった場合は、NULLポインタを返します。

sqlite3_malloc()の引数Nがゼロまたは負の場合、sqlite3_malloc()はNULLポインタを返します。

事前にsqlite3_malloc()またはsqlite3_realloc()によって返されたポインタでsqlite3_free()を呼び出すと、再利用するためのメモリを解放します。

sqlite3_free()ルーチンは、NULLポインタを指定して呼び出した場合は何もしません。

sqlite3_free()にNULLポインタを渡しても無害です。

解放した後、メモリは読み込みも書き込みもできません。

仮に事前に解放されたメモリを読み込むと、セグメンテーション違反や他の重大なエラーが発生することがあります。

sqlite3_malloc()またはsqlite3_realloc()から取得していない非NULLポインタでsqlite3_free()を呼び出した場合、メモリの破損やセグメンテーション違反、または他の重大なエラーが発生する可能性があります。

sqlite3_realloc()インターフェイスは第2引数をNとすると、メモリを割り当てる前に少なくともNバイトでリサイズを試みます。

リサイズされるメモリ割り当ては第1引数です。

sqlite3_realloc()の第1引数がNULLポインタの場合、sqlite3_realloc()の第2引数Nとすると、その動作はsqlite3_malloc(N)の呼び出しと同じです。

sqlite3_realloc()の第2引数がゼロまたは負の場合、sqlite3_realloc()の第1引数をPとすると、その動作はsqlite3_free(P)の呼び出しと正確に同じです。

十分なメモリが確保できない場合、sqlite3_realloc()は少なくともNバイトを割り当てたメモリのポインタ、またはNULLを返します。

事前に割り当てたサイズをMとすると、事前に割り当てたmin(N,M)バイトはsqlite3_realloc()によって返されるバッファの先頭にコピーされ、事前に割り当ては解放されます。

sqlite3_realloc()がNULLを返した場合、事前の割り当ては解放されません。

sqlite3_malloc()とsqlite3_realloc()によって返されたメモリは、常に少なくとも8バイト区切りで、またはコンパイル時のオプションでSQLITE_4_BYTE_ALIGNED_MALLOCが使用されている場合は4バイト区切りで配置されます。

SQLiteのバージョン3.5.0と3.5.1では、組み込みで実装されているSQLITE_OMIT_MEMORY_ALLOCATIONを定義することができ、これらのルーチンを省略することができました。

その機能はもう提供されていません。

組み込みのメモリアロケータでのみ使用することができます。

Windows OSインターフェイスのレイヤーは、SQLiteで使用されるUTF-8エンコーディングとファイル名を変換する時にシステムのmalloc()とfree()を直接呼び出し、特定のWindowsインストールでファイル名の変換に使用されています。

メモリ割り当てエラーが検出された場合、SQLITE_NOMEMよりもSQLITE_CANTOPENSQLITE_IOERRとして報告されます。

sqlite3_free()とsqlite3_realloc()への引数のポインタは、NULLあるいはまだ解放されていない事前のsqlite3_malloc()やsqlite3_realloc()の呼び出しで取得したポインタのどちらかである必要があります。

アプリケーションは、sqlite3_free()またはsqlite3_realloc()を使用して解放された後のメモリブロックの任意の部分に、読み込みまたは書き込みをしてはいけません。

ObjectsConstantsFunctionsの一覧を参照してください。



参考文献

Memory Allocation Subsystem

Wikipedia/仮想ファイルシステム

0 CommentsPosted in SQLite





Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR