Общая память в библиотеках DLL

Как совместное использование памяти работает в библиотеках DLL?

Когда DLL присоединяется к процессу, она использует те же адреса памяти, что и процесс. Предположим, у нас есть следующая функция в DLL:

int * data = 0;
int foo()
{
    if (!data) data = new int(random());
    return *data;
}

Когда процесс A вызывает эту функцию, он создает новый объект (int) и возвращает его значение. Но теперь процесс B присоединяет эту DLL. Он вызывает foo (), но я не понимаю, как это будет работать, потому что данные находятся в процессе «Пространство памяти. Как B сможет использовать его напрямую?

5
задан user986654 9 October 2011 в 18:49
поделиться