首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ctypes和内存泄漏

ctypes和内存泄漏
EN

Stack Overflow用户
提问于 2011-08-27 05:58:31
回答 3查看 1.1K关注 0票数 1

test.c:

代码语言:javascript
运行
复制
#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:

代码语言:javascript
运行
复制
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之后和脚本结束之前,哪些内存没有空闲?

EN

Stack Overflow用户

发布于 2011-08-27 10:38:59

在Linux系统中,进程永远不会将内存交还给操作系统,只有当它们停止时才会。这就是为什么你看不到内存被释放的原因。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7210965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档