Allow not copying the wasm binary in wasm-c-api and not referring to the binary in wasm/aot loader (#3389)
Add flag `LoadArgs.clone_wasm_binary` to control whether to clone the wasm/aot binary in wasm-c-api module. If false, API `wasm_module_new_ex` won't clone the binary, which may reduce the footprint. Add flag `LoadArgs.wasm_binary_freeable` to control whether the wasm/aot binary may be freed after instantiation for wamr API `wasm_runtime_load_ex`, if yes, then for some running modes, the wasm/aot module doesn't refer to the input binary again so developer can free it after instantiation to reduce the footprint. And add API `wasm_module_is_underlying_binary_freeable` and `wasm_runtime_is_underlying_binary_freeable` to check whether the input binary can be freed after instantiation for wasm-c-api and wamr api. And add sample to illustrate it.
This commit is contained in:
@ -227,6 +227,13 @@ typedef struct RuntimeInitArgs {
|
||||
#define LOAD_ARGS_OPTION_DEFINED
|
||||
typedef struct LoadArgs {
|
||||
char *name;
|
||||
/* This option is only used by the Wasm C API (see wasm_c_api.h) */
|
||||
bool clone_wasm_binary;
|
||||
/* False by default, used by AOT/wasm loader only.
|
||||
If true, the AOT/wasm loader creates a copy of some module fields (e.g.
|
||||
const strings), making it possible to free the wasm binary buffer after
|
||||
loading. */
|
||||
bool wasm_binary_freeable;
|
||||
/* TODO: more fields? */
|
||||
} LoadArgs;
|
||||
#endif /* LOAD_ARGS_OPTION_DEFINED */
|
||||
@ -1886,6 +1893,16 @@ WASM_RUNTIME_API_EXTERN bool
|
||||
wasm_runtime_detect_native_stack_overflow_size(wasm_exec_env_t exec_env,
|
||||
uint32_t required_size);
|
||||
|
||||
/**
|
||||
* Query whether the wasm binary buffer used to create the module can be freed
|
||||
*
|
||||
* @param module_inst the target module instance
|
||||
* @return true if the wasm binary buffer can be freed
|
||||
*/
|
||||
WASM_RUNTIME_API_EXTERN bool
|
||||
wasm_runtime_is_underlying_binary_freeable(
|
||||
const wasm_module_inst_t module_inst);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user