Форум сайта python.su
test.c:
#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)=(fragment_t *) malloc(sizeof(fragment_t));
(bts->fragments)->FirstFragmentTimestamp = 0;
}
return bts;
}
int fr(bts_t *bts)
{
uint32_t i;
if ( bts != NULL ) {
for(i=0;i<MAXFRAGMENTS;i++) {
free(bts -> fragments);
}
free(bts->fragments);
}
free(bts);
return 1;
}
int main() {
bts_t* test;
test = initialize();
printf(“print\n”);
sleep(10);
}
test.py:
#!/usr/bin/python2
from ctypes import *
import time.
class test(Structure):
pass
class fragment(Structure):
_fields_=
class btest(Structure):
_fields_=
test_pointer=POINTER(btest)
test_library=CDLL(“test.so”)
initialize = test_library.initialize
fr = test_library.fr
initialize.restype = test_pointer
for i in xrange(0,n):
m = initialize()
fr(m)
print ‘done’
time.sleep(20)
почему при n > 1 top показывает что память освобождается перед print, а при n = 1 в top сжирается 150 мб памяти ? 150 мб это еще ничего а вот если работает 10 параллельных threads то память кушается уже 1 гиг :(
Отредактировано (Авг. 27, 2011 10:44:52)
Офлайн