Pilha de uma dll
26/11/2005
0
Os endereços de pilha são distintos utilizando a memória do aplicativo ou é um único endereço utilizando a memória do Windows ?
Usando ShareMem ou não usando, faria diferença ?
Fiz um teste colocando na função um Sleep de 10 segs; chamei tres vezes o programa que executa essa função no onShow e após 10 segs os tres programas exibiram a tela; ou seja; o segundo programa não esperou 20 segs e nem o terceiro esperou 30 segs. Daí acho que os aplicativos importam a função dentro de sua respectiva memória.
Alguém poderia explicar como funciona ?
Obrigado !
Siam
Posts
26/11/2005
Edilcimar
prg1->1mb, prg2->2mb, prg3->5mb, teoriamente você teria a partir de um determinado ponto da memória o seguinte: posição 50mb começa o prg1, posição 51mb começa o prg2, posição 56mb começa o prg3, é claro que aqui eu não separei as coisas que cada programa carrega consigo, depois disto o windows ´divide´ o tempo por três e dá uma fração de tempo para o prg1, depois outra para o pr2 e depois outra para o prg3, sendo que dá mais tempo para aquele que tem foco, ou seja um programa (mesmo que seja o mesmo) não deveria ter absolutamente nada com o outro (mas esta divisão é mal feita pela MS e é por isto que dá aquelas ´pequenas´ travadas).
28/11/2005
Siam
28/11/2005
Nildo
Seguinte, cada programa carrega uma [b:4502b050a6]cópia[/b:4502b050a6] da sua DLL no espaço alocado para cada um dos programas. Então fica assim:
uma cópia da DLL no espaço do aplicativo 1;
outra cópia da DLL no espaço do aplicativo 2;
outra cópia da DLL no espaço do aplicativo 3;
Essa regra vale para os Windows com kernel baseado em NT. Já nos 9x, as DLLs do windows como user32.dll, gdi32.dll e kernel32.dll, são carregadas em um espaço compartilhado de memória, onde todos os aplicativos acessam essa paginação ( > $80000000 ). Eu falo sobre isso num artigo do meu site: www.ProjetoBms.net. O que era um grave erro no win9x, eles queriam economizar memória sendo que não havia necessidade. Então no NT ficou tudo organizadinho, e cada programa tem sua cópia da DLL rodando no próprio bloco de memória virtual.
Qualquer coisa estamos aí!
28/11/2005
Siam
Obrigado pela resposta !!!
Clique aqui para fazer login e interagir na Comunidade :)