mallocとfree - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/qwr1571437338192.ditamap
dita:ditavalPath
ja-JP/qwr1571437338192.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

UDFがその使用のためにメモリを割り当てる必要がある場合には、C標準ライブラリ関数のmallocおよびfreeの代わりにTeradata Cのライブラリ関数FNC_mallocおよびFNC_freeを使用します。sqltypes_td.hヘッダー ファイルの中でmallocはFNC_mallocを、freeはFNC_freeを呼び出すように再定義されています。

FNC_freeとFNC_mallocは、UDFの終了前にすべてのメモリを解放するための検査を実施し、UDFが割り振った一時メモリのすべてを解放しなかった場合にはトランザクションに対して例外を発行します。これにより、データベースにおけるメモリ リークが防止されます。

mallocfreeを直接呼び出すようなロジックにすると、UDFで正しくメモリを解放してもメモリ リークが発生する可能性があります。それは、ユーザーがトランザクションをアボートしたり、実行中のUDFには認識されていない別のノードで何らかの制約違反が発生したためにトランザクションがアボートしたりすると、UDFが実行中でもUDFがアボートする可能性があるためです。

ユーザー 結果
スタンドアロンのUDFを開発、テスト、およびデバッグする場合 malloc.hヘッダー ファイルをインクルードして、C標準ライブラリ関数のmallocおよびfreeを使用します。
CREATE FUNCTIONを使用してUDFソース コードをサーバーに発行する場合 malloc.hヘッダー ファイルはインクルードしないようにし、sqltypes_td.hヘッダー ファイルのmallocおよびfreeの定義を使用します。

それらの定義は、サーバーにUDFソース コードを発行する際には使用され、UDFオブジェクトの発行時には使用されません。