Pergunta

Sempre que qualquer novo objeto é criado, o objeto é criado no heap. A memória alocada para cada objecto tem dois campos adicionais 1) O ponteiro do tipo de objecto índice bloco 2) de sincronização.

O que é exatamente o uso desses dois campos. Alguém pode lançar luz sobre isso?

Foi útil?

Solução

O ponteiro objeto tipo é usado para representar o tipo do objecto. Isso é necessário para:

  • lookup Method (vtable)
  • Verificar moldes
  • Encontrar o objeto Type se você chamar GetType.

O campo syncblock é utilizado principalmente para o bloqueio. É só preencher quando ele precisa ser, e quando um bloqueio é sempre contestado a CLR marcas fazer com um bloqueio "fina", que não requer qualquer de dados externa. Caso contrário, é uma entrada em uma tabela de todo o processo - Eu não sei os detalhes do que está em cima da mesa, mas eu imagino que é coisas como uma lista de segmentos de espera no monitor do objeto. Claro que o bit de informação mais importante é se ou não o bloqueio é actualmente detida pela qual segmento, e que sua contagem é (devido à natureza de reentrada de .NET fechaduras).

O syncblock também é preenchido se você chamar GetHashCode() e não é substituído - ele usa a mesa de todo o processo para atribuir um número estável, basicamente. (O endereço do objeto não é bom o suficiente, pois ele pode mudar ao longo do tempo.)

Outras dicas

tipo de objeto é o retornado por obj.GetType chamada

bloco de sincronização usado para sincronização

Veja:

O índice de blocos de sincronização é usado sob o capô pela classe monitor e, portanto, a declaração de bloqueio também.

Alguns bits de índice de blocos de sincronização são também utilizados por GC para marcar um objecto como lixo no caso já não é referenciado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top