Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 27, 2011 10:43:21

Bdfy1
От:
Зарегистрирован: 2009-11-03
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

ctypes и память

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version