A opção / 3GB aumenta o espaço de endereço do usuário por processo ou processos totais?

1

Entendi que é por processo, não o total de processos. Mas de acordo com o suporte de memória grande está disponível no Windows Server 2003 e no Windows 2000 (KB283037):

Typically, a process running under Windows 2000 or Windows Server 2003 can access up to 2 GB of memory address space (assuming the /3GB switch was not used) with some of the memory being physical memory and some being virtual memory. The more programs (and, therefore, more processes) that run, the more memory you commit up to the full 2 GB of address space.

Isso para mim diz que quanto mais programas você executar, mais chances você atingirá o limite de espaço de 2GB. Por exemplo, o Programa A usa 500MB, o Programa B usa 1GB, então você só tem 500MB de espaço de endereço para o restante de seus programas. .

No entanto, um artigo do MSDN link se refere a isso como espaço de endereço do processo e para mim implica que O aplicativo each recebe seu espaço de endereço próprio , seja 2 GB ou 3 GB, dependendo de qual switch está sendo usado no boot.ini.

Então, é por processo ou processo total? E o artigo da base de conhecimento está errado (ou mal formulado)?

(Por favor, note que estou falando apenas de sistemas de 32 bits)

    
por fenster 27.08.2009 / 19:11

3 respostas

5

É espaço de endereço virtual por processo, de acordo com o artigo do MSDN, e a excelente série de artigos sobre este assunto escritos por Raymond Chen e arquivados em seu blog.

Aqui está sua página de índice para esta série de artigos - muito bem vale a pena ler se você está lidando com suporte de memória grande como um administrador sênior do sistema ou um desenvolvedor.

    
por 27.08.2009 / 19:19
2

Aumenta apenas o espaço de endereçamento para programas que são compilados com um bit mágico que pode, opcionalmente, procurar por este espaço extra.

Esse bit mágico é para o suporte "Large Address Aware".

A maioria dos programas da Microsoft (acredito) tem esse bit habilitado por padrão.

Existe uma ferramenta disponível na internet, o LaaTIDO, que permite esse bit. Eu usei essa ferramenta para ativar o suporte a grandes endereços para Tomcat & JDK da Sun em execução no Windows.

    
por 27.08.2009 / 19:19
0

O problema com esse sinalizador é que alguns programadores não sabem que um local de memória pode estar acima do limite de 2 GB, o que pode causar alguns erros desagradáveis no aplicativo. E deixe-me explicar por que ...

Um ponteiro para um endereço na RAM é semelhante a um inteiro assinado de 32 bits em determinados idiomas. Assinado significa que pode ser positivo ou negativo. Agora, para verificar se um ponteiro está atribuído ou não, você verifica se é igual a NULL / nulo ou não. Se não é nulo, é atribuído a algo. Alguns programadores verificam isso verificando se o endereço é maior que nulo, esquecendo a possibilidade de que os endereços possam ser negativos. Como um ponteiro negativo é menor do que nulo, o sistema pensa que não está designado e, portanto, reatribui um novo valor a ele, perdendo seu valor atual e vazando memória.

Felizmente, a maioria dos programadores aprendeu a verificar se é igual ou diferente, em vez de maior que nulo. Nesse caso, o aplicativo não teria problemas em usar até 3 GB.

    
por 27.08.2009 / 21:10