C_and_CPP 板


LINE

※ 引述《sunneo (艾斯寇德)》之铭言: : 这里是指其他的process没错 : 不过这里是举单纯是对无效位址free的例子 : 假使有一以shared共享的全域变数个指标使用malloc配置记忆体并且作为回传值 : 这时候别的process看到的可能是同一个记忆体位址,因为是一个共享变数的资料 : 但该位址在自己的proecss不见得有配置记忆体,那麽再free的时候就会失败。 : 这里说的shared修饰是以下这两种 : #pragma data_seg("shared") : __attribute__((section ("Shared"), shared)) : (或者单纯只是在win 95/98/me下的情形) 我想你说的没错,但老实这个情况有点极端,因为在 shared section 放 pointer 的唯一用处,就是这个 pointer 指向同在 shared section 的记 忆体区块。拿来指向 malloc 的结果,对其它 process 来说完全无用,我 好奇哪个人会这样写 DLL。 回到原po的问题,在 DLL 中呼叫 malloc 而在 client code 呼叫 free, 我认为并没有什麽技术上的问题,但在 library 的设计上这样做的确是不 好的。比如说你写了某个 function 会回传 malloc 配置到的空间: int* foo(void) { int* p = malloc(...); ... // 一些运算 return p; } 乍看之下,只要呼叫 foo() 的那端有确实呼叫 free 来释放记忆体,就不 会有 memory leak 的问题。但要是过了一阵子,你想把 malloc 改成new (或是你想自己写 memory allocator),问题就来了。因为用 new 去配置 的区块必需用 delete 去释放,所以你这一改,所有呼叫到 foo() 的地方 也都要跟着改了。 改进方法是写另一个 function 去释放记忆体: void Release(int* p) { // client code 一定要呼叫 Release 才能释放记忆体 // 所以要是我们改用 new 来配置,只要在这边改成 // delete 即可 free(p); } 设计上有个要点是:当你写了某个会配置资源并回传给 client 的 function, 那你应该也要写一个对应的 function 来释放资源。这麽一来,client 就完 全不需要知道你如何配置及释放,你随时可以抽换这部份的功能。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.114.95







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP