optimize stack usage for PikaVM

This commit is contained in:
pikastech 2023-04-16 20:53:08 +08:00
parent 001efd5946
commit 53de20fa55
2 changed files with 13 additions and 8 deletions

View File

@ -47,3 +47,5 @@ def generate_report(stack_usage_data):
if __name__ == "__main__":
stack_usage_data = collect_stack_usage_info()
report = generate_report(stack_usage_data)
with open("stack_usage_report.txt", "w") as f:
f.write(report)

View File

@ -1398,22 +1398,22 @@ static int _get_n_input_with_unpack(VMState* vm, int n_used) {
}
#define vars_or_keys_or_default (f.is_vars || f.is_keys || f.is_default)
#define METHOD_TYPE_LIST_MAX_LEN PIKA_LINE_BUFF_SIZE
static int VMState_loadArgsFromMethodArg(VMState* vm,
PikaObj* method_host_obj,
Args* locals,
Arg* method_arg,
char* method_name,
int n_used) {
Arg* argv[PIKA_ARG_NUM_MAX] = {0};
int argc = 0;
char _buffs1[PIKA_LINE_BUFF_SIZE] = {0};
char* buffs1 = (char*)_buffs1;
char _buffs2[PIKA_LINE_BUFF_SIZE] = {0};
char* buffs2 = (char*)_buffs2;
Arg** argv = (Arg**)pikaMalloc(sizeof(Arg*) * PIKA_ARG_NUM_MAX);
char* buffs1 = (char*)pikaMalloc(METHOD_TYPE_LIST_MAX_LEN);
char* buffs2 = (char*)pikaMalloc(METHOD_TYPE_LIST_MAX_LEN);
FunctionArgsInfo f = {0};
char* type_list_buff = NULL;
/* get method type list */
f.type_list = methodArg_getTypeList(method_arg, buffs1, sizeof(_buffs1));
f.type_list =
methodArg_getTypeList(method_arg, buffs1, METHOD_TYPE_LIST_MAX_LEN);
if (NULL == f.type_list) {
pika_platform_printf(
"OverflowError: type list is too long, please use bigger "
@ -1494,7 +1494,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
/* create tuple/dict for vars/keys */
if (vars_or_keys_or_default) {
if (strGetSize(f.type_list) > sizeof(_buffs2)) {
if (strGetSize(f.type_list) > METHOD_TYPE_LIST_MAX_LEN) {
pika_platform_printf(
"OverFlowError: please use bigger PIKA_LINE_BUFF_SIZE\r\n");
while (1) {
@ -1581,6 +1581,9 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
}
_loadLocalsFromArgv(locals, argc, argv);
exit:
pikaFree(buffs1, METHOD_TYPE_LIST_MAX_LEN);
pikaFree(buffs2, METHOD_TYPE_LIST_MAX_LEN);
pikaFree(argv, sizeof(Arg*) * PIKA_ARG_NUM_MAX);
return f.n_arg;
}
@ -4128,7 +4131,7 @@ PikaObj* pikaVM_runFile(PikaObj* self, char* file_name) {
void _pikaVM_yield(void) {
#if PIKA_EVENT_ENABLE
if(!g_PikaVMSignal.event_thread_inited) {
if (!g_PikaVMSignal.event_thread_inited) {
_VMEvent_pickupEvent();
}
#endif