我有这段代码:
#include <stdio.h>
#include <unistd.h>
#include <json/json.h>
#include <stdio.h>
json_object *new_array;
void add_result_event(json_object *scan_result) {
json_object_array_add(new_array, scan_result);
}
void add_scan_result() {
json_object *scan_result = json_object_new_object();
json_object_object_add(scan_result, "ssid", json_object_new_string("ssssssssssssssssssssssssssssiiiiiiiiiiiidddddddddd"));
add_result_event(scan_result);
}
void alloc_object() {
int i = 0;
while (i < 100000) {
add_scan_result();
i++;
}
}
int main() {
new_array = json_object_new_array();
printf(" not started.. see memory\n");
system("ps -aux | grep sonj");
sleep (1);
alloc_object();
printf(" allocated.. see memory\n");
system("ps -aux | grep sonj");
sleep (1);
json_object_put(new_array);
printf(" freed.. see memory\n");
system("ps -aux | grep sonj");
sleep (1);
new_array = json_object_new_array();
printf(" allocated.. see memory\n");
alloc_object();
system("ps -aux | grep sonj");
sleep (1);
}
编译:
~$ gcc json_array_obj_d.c -ljson-c -o sonj
然后,运行:
~$ ./sonj
输出的VSZ字段未显示json_object_put call
之后释放到系统的任何内存。
因此使用json_object_put
释放不会给系统带来内存,但是下一次分配也不会为系统带来更多内存。
在系统中显示空闲内存后调用json_object_put
?