TEST.C :하는 ctypes 및 메모리 누수
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXFRAGMENTS 4000000
typedef struct {
uint64_t FirstFragmentTimestamp;
} fragment_t;
typedef struct {
fragment_t** fragments;
} bts_t;
bts_t* initialize() {
uint32_t i;
bts_t* bts;
bts = (bts_t *) malloc(sizeof(bts_t));
bts->fragments= (fragment_t **) malloc(sizeof(bts_t *)*MAXFRAGMENTS);
for(i=0;i<MAXFRAGMENTS;i++) {
(bts->fragments)[i]=(fragment_t *) malloc(sizeof(fragment_t));
(bts->fragments)[i]->FirstFragmentTimestamp = 0;
}
return bts;
}
int fr(bts_t *bts)
{
uint32_t i;
if (bts != NULL) {
for(i=0;i<MAXFRAGMENTS;i++) {
free(bts -> fragments[i]);
}
free(bts->fragments);
}
free(bts);
return 1;
}
int main() {
}
test.py :
from ctypes import *
import time
class fragment(Structure):
_fields_=[("FirstFragmentTimestamp",c_ulong)]
class bts(Structure):
_fields_=[("fragments",POINTER(POINTER(fragment)))]
bts_pointer=POINTER(bts)
bts_library=CDLL("test.so")
bts_initialize = bts_library.initialize
bts_initialize.restype = bts_pointer
bts_free = bts_library.fr
m = bts_pointer()
m = bts_initialize()
bts_free(m)
print 'done'
time.sleep(20)
왜 최고 쇼, 실행 bts_free 후 무료로 무엇을 기억하지 및 스크립트의 끝나기 전에?
맞지 않습니다. 적어도, 그들은 그렇게 할 수 있습니다. 그리고 만약 내가'malloc()'을 많이 사용하고'free() '하면 프로세스의 크기가 줄어 듭니다. – glglgl