Strona 1 z 1

[C] fork i kopiowanie zawartości pamięci

: 24 kwie 2010, 16:53
autor: dawwin
Mam pytanie odnośnie kopiowania zawartości pamięci należącej do procesu podczas wywoływania funkcji fork().
Poniżej jest przykładowy kod, w którym ręcznie alokuję sobie pamięć, następnie ustawiam wartość dla a na 1, rozdzielam procesy, w potomku ustawiam a na 5 i drukuję, po sekundzie robię to samo u przodka.
Może mi ktoś wytłumaczyć, dlaczego pomimo takiego samego adresu w pamięci wartości dla a u przodka i potomka są różne?

Kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    char *a;
    a = (char *) malloc(sizeof(char));
    *a = 1;

    if (fork() == 0) {
        *a = 5;
        printf("%d %p %d\n", *a, a, getpid());
    } else {
        sleep(1);
        printf("%d %p %d\n", *a, a, getpid());
    }

    return 0;
}
Wyniki:

Kod: Zaznacz cały

5 0x82b9008 6860
1 0x82b9008 6859

Odp: [C] fork i kopiowanie zawartości pamięci

: 25 kwie 2010, 17:32
autor: DDAroo
http://www.digipedia.pl/man/doc/view/fork.2/ - osobny proces, osobna pamięć wirtualna; pamiętaj też, że w systemie linux każdy proces ma niezależną pamięć wirtualną - każdy proces "widzi", że ma 3GB pamięci do wyłącznej dyspozycji nawet, jeśli masz fizycznie 512MB ram-u w komputerze.

Odp: [C] fork i kopiowanie zawartości pamięci

: 26 kwie 2010, 20:24
autor: el.pescado
fork() kopiuje proces. Każdy proces ma własną przestrzeń adresową. Jeżeli chcesz inaczej, możesz użyć:
* pamięci współdzielonej
* wątków zamiast procesów

Odp: [C] fork i kopiowanie zawartości pamięci

: 26 kwie 2010, 21:00
autor: dawwin
Nie chcę inaczej. Po prostu interesowało mnie, czy nie będzie jakichś konfliktów z tego powodu