亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3909 | 回復(fù): 17
打印 上一主題 下一主題

[C] malloc與fork問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-05-29 11:16 |只看該作者 |倒序?yàn)g覽
1.代碼
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

main()
{
    char *ptr;
    pid_t child;

    ptr=(char *)malloc(20);

    child=fork() ;
    if ( child<0 ) {
        perror("fork err");
        exit(-1);
    } else if ( child==0 ) {
        sleep(1);
        printf("%d,%p,[%s]\n",getpid(),ptr,ptr);
        exit(0);
    } else {
        strcpy(ptr,"hello");
        printf("%d,%p,[%s]\n",getpid(),ptr,ptr);
        wait(NULL);
        exit(0);
    }
}

執(zhí)行結(jié)果是:
2200,403b44,[hello]
2201,403b44,[]
以前聽說(shuō)子進(jìn)程如果不改變ptr的值,那么就不重新分配空間,地址是沒(méi)有變化,可為什么取不到值,是不是403b44是內(nèi)存相對(duì)地址?

2.還想問(wèn)個(gè)問(wèn)題,一個(gè)函數(shù),fork之后子進(jìn)程malloc,然后exit退出子進(jìn)程,再return退出函數(shù),之間沒(méi)有free會(huì)不會(huì)內(nèi)存泄露?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-05-29 11:19 |只看該作者
進(jìn)程間資源相互獨(dú)立,比如內(nèi)存。只是某些變量的值一樣(沒(méi)有認(rèn)為改變的前提下,保持fork前狀態(tài))
比如:
一個(gè)int變量的內(nèi)容
一個(gè)指針變量的內(nèi)容

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-05-29 11:28 |只看該作者

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2008-05-29 11:45 |只看該作者
感覺上應(yīng)該是已經(jīng)指向不同地址了,要那么容易就共享內(nèi)存,還要IPC干什么? 呵呵
解釋一下用%p打印的ptr地址的意義?

另,請(qǐng)哪位大俠說(shuō)下第二個(gè)問(wèn)題。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-05-29 11:46 |只看該作者
1、403b44是虛地址

2、自己malloc的自己free,和進(jìn)程沒(méi)關(guān)系。分配了沒(méi)free就肯定泄漏。而且,你不能把子進(jìn)程分配的內(nèi)存在父進(jìn)程free

參考2樓

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2008-05-29 11:49 |只看該作者
我覺得你是沒(méi)搞清物理地址和虛地址的概念

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-05-29 11:54 |只看該作者
退出進(jìn)程會(huì)自動(dòng)free吧

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-05-29 12:03 |只看該作者
原帖由 weedeater 于 2008-5-29 11:46 發(fā)表
1、403b44是虛地址

2、自己malloc的自己free,和進(jìn)程沒(méi)關(guān)系。分配了沒(méi)free就肯定泄漏。而且,你不能把子進(jìn)程分配的內(nèi)存在父進(jìn)程free

參考2樓


1、能否說(shuō)明一下虛地址?

2、我的程序不是長(zhǎng)期運(yùn)行,退出后OS是不是會(huì)自己回收內(nèi)存?
   我沒(méi)有在父進(jìn)程中free子進(jìn)程空間的打算,你理解錯(cuò)我的意思了。我的意思是這樣:

int function()
{
      child=fork();
      if (child==0) {
            malloc(...);
            execl(...);
      }

      wait(status);
      
      return(status)
}
因?yàn)閳?zhí)行完execl后程序就exit退出了,所以沒(méi)有free。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-05-29 12:21 |只看該作者
*nix系統(tǒng)是有個(gè)寫時(shí)復(fù)制的機(jī)制,是說(shuō)父子進(jìn)程任何一方修改共享的內(nèi)容時(shí),都會(huì)導(dǎo)致系統(tǒng)復(fù)制修改部分的頁(yè)面給該進(jìn)程,并不是你說(shuō)的僅僅是子進(jìn)程修改內(nèi)容才會(huì)導(dǎo)致復(fù)制的發(fā)生。

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-05-29 12:35 |只看該作者
雖然進(jìn)程退出后OS會(huì)自動(dòng)回收內(nèi)存,可這不是我們偷懶的接口,
萬(wàn)一誰(shuí)把那段程序copy到長(zhǎng)期運(yùn)行的服務(wù)器程序去呢,
程序退出后打開的文件描述符都會(huì)close,
那是否我們就只管open, 不去close呢?
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP