SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Economizando memória com rBits

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11381
    Moedas : 1031991
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Economizando memória com rBits Empty [Tutorial] Economizando memória com rBits

    Mensagem por Weslley_Script Qui 30 Mar 2023 - 8:17

    :hearts: Introdução
    • * Esse tutorial é destinado a quem já possui conhecimentos básicos/intermediários em programação.

      Em meus anos pelo SA-MP, já vi diversos servidores com um problema grave de memória. Esses servidores tinham um aumento exponencial de memória RAM consumida quanto mais jogadores logavam. O problema foi causado porque muitos desses gamemodes foram totalmente mal feitos e passados ​​por muitas pessoas incapazes de fazer um cуdigo bem feito.

      Você pode economizar muita memória se administrar bem e rBits vai te ajudar nisso. Vocк nгo й obrigado economizar memуria, mas seria muito bom. Principalmente se o seu gamemode possuí um alto consumo de memória.


    :hearts: Quanto de memória cada variável usa
    • Em outras linguagens de programação, há a possibilidade de você declarar certos tipos de variáveis ​​que possuem tamanhos diferentes. Obviamente quanto mais curto o limite, menos memуria serб usada pelo computador.

      No peão, cada variável declarada possuí 32 bits (4 bytes assinados) de memória e um tamanho de -2.147.483.648 a 2.147.483.647. É um tamanho e tanto. Agora imagine que você está declarando uma variável bool . Uma variável bool utiliza apenas 2 valores, que são: true(1) ou false(0). Uma variável de 32 bits seria totalmente desnecessária nesse e em muitos outros casos. Olhem quanto espaço tem ali vбzio que poderia ser bem economizado.

      Estendendo ainda mais o exemplo.
      PHP como:
      Código:
      #undef MAX_PLAYERS
      #define MAX_PLAYERS 100
      new bool:Spawn[MAX_PLAYERS]; 
      No cуdigo acima, й ainda mais memуria desperdiзada. Serб 32bit * 100 de memуria usada sendo que vocк nгo usa nem 1% da capacidade. Você vai armazenar apenas os valores 0 e 1 de -2.147.483.648/2.147.483.647.


    :hearts:Tamanhos



    • 1-bit

      2 bits

      4 bits

      8 bits

      16 bits
      Limite1 ─ 0x13 ─ 0x315 ─ 0xF255 ─ 0xFF65535 ─ 0xFFFF
      (lista do tópico oficial)

      A lista a cima mostra os tamanhos que podemos utilizar e vou explicar como você pode usar esses valores.


    • Vou procurar ser o mais claro possível sobre as funções, vou tentar explicar todas as funções essenciais para a administração de sua memória. Qualquer dúvida será respondida, exceto perguntas extremamente idiotas.

      1° Incluindo: Antes de iniciar com o cуdigo, você deve baixar e importar o rBits ao seu projeto.
      PHP como:
      Código:
      #include <rBits> 
      2° Declarando uma variável: As variáveis ​​devem ser declaradas com pré-fixo 'Bit (tamanho de acordo com a tabela) :' e devem possuir entre <> o tamanho da matriz. Exemplo: MAX_PLAYERS.
      PHP como:
      Código:
      new Bit1:Variavel1<MAX_PLAYERS>; // variбvel de 1bit (Suporta o tamanho de 0 e 1)
      new Bit2:Variavel2<MAX_PLAYERS>; // variбvel de 2bit (Suporta o tamanho de atй 3)
      new Bit4:Variavel3<MAX_PLAYERS>; // variбvel de 4bit (Suporta o tamanho de atй 15)
      new Bit8:Variavel4<MAX_PLAYERS>; // variбvel de 8bit (Suporta o tamanho de atй 255)
      new Bit16:Variavel5<MAX_PLAYERS>; // variбvel de 16bit (Suporta o tamanho de atй 65535)
      // Para um tamanho maior, use a variбvel normalmente. Exemplo:
      new oi; 
      3є Alterando o valor: Essas variáveis ​​possuem uma forma diferente para terem seus valores alterados. Uma variável normal pode ter o valor dela definido usando o operador = . Mas essas variáveis ​​usam a função Bit (tamanho dessa array) _Set(Nome da Array, slot, valor); .
      PHP como:
      Código:
      // Variбvel comum
      new Array[3]; // Declarei uma variбvel (padrгo: 32bit)
      Array[0] = 1; // Alterou o valor do slot 0 da variбvel 'Array' para 1
      Array[1] = 2; // Alterou o valor do slot 1 da variбvel 'Array' para 2
      Array[2] = 3; // Alterou o valor do slot 2 da variбvel 'Array' para 3
      // Variбvel do rBits
      new Bit2:Array<3>; // Declarei uma variбvel de 3bit
      Bit2_Set(Array, 0, 1); // Alterou o valor do slot 0 da variбvel 'Array' para 1
      Bit2_Set(Array, 1, 2); // Alterou o valor do slot 1 da variбvel 'Array' para 2
      Bit2_Set(Array, 2, 3); // Alterou o valor do slot 2 da variбvel 'Array' para 3 
      4є Extraindo o valor: Os valores dessas matrizes também são extraíndos de forma diferente das variáveis ​​comuns. Sáo extraídos através da função
      Bit (tamanho dessa array) _Get(Nome da Array, slot);
      PHP como:
      Código:
      // Variбvel comum
      new Array[3]; // Declarei uma variбvel (padrгo: 32bit)
      Array[0] = 1; // Alterou o valor do slot 0 da variбvel 'Array' para 1
      Array[1] = 2; // Alterou o valor do slot 1 da variбvel 'Array' para 2
      Array[2] = 3; // Alterou o valor do slot 2 da variбvel 'Array' para 3
      printf("%d", Array[0]); // Vai printar o valor 1 na tela
      printf("%d", Array[1]); // Vai printar o valor 2 na tela
      printf("%d", Array[2]); // Vai printar o valor 3 na tela
      // Variбvel do rBits
      new Bit2:Array<3>; // Declarei uma variбvel de 3bit
      Bit2_Set(Array, 0, 1); // Alterou o valor do slot 0 da variбvel 'Array' para 1
      Bit2_Set(Array, 1, 2); // Alterou o valor do slot 1 da variбvel 'Array' para 2
      Bit2_Set(Array, 2, 3); // Alterou o valor do slot 2 da variбvel 'Array' para 3
      printf("%d", Bit2_Get(Array, 0)); // Vai printar o valor 1 na tela
      printf("%d", Bit2_Get(Array, 1)); // Vai printar o valor 2 na tela
      printf("%d", Bit2_Get(Array, 2)); // Vai printar o valor 3 na tela 
      É bem comum que você considere usar um valor que não tenha definido. Nesse caso, você deve usar uma variável que chegue mais perto desse valor. Exemplo: "Quero armazenar o valor 21 em uma array, oque faz ?"
      PHP como:
      Código:
      new Bit8:Array<1>;
      Bit8_Set(Array, 0, 21); 
      Usei 8bit pq é o valor minimo de bit que pode conter o valor 21. As arrays com bit menor não conseguem salvar o valor 21. Pode ver lá na tabela.[Tutorial] Economizando memória com rBits Razz


    :hearts: Prática
    • Vou dar 2 exemplos de como usar rBits para que tudo fique mais claro.

      Ver se o jogador fez spawn:
      PHP como:
      Código:
      // Normalmente (gastando mais memуria)
      #include <a_samp>
      new bool:Spawno[MAX_PLAYERS]; // Declarei a variбvel (padroгo 32bit)
      public OnPlayerConnect(playerid)
      {
          Spawno[playerid] = 0; // Setei a variбvel do jogador para 0 (false) pq ele ainda nгo fez spawn
          return 1;
      }
      public OnPlayerSpawn(playerid)
      {
          Spawno[playerid] = 1; // Setei a variбvel do jogador para 1 (true) pq ele fez o spawn
          return 1;
      }
      // Com rBits (gastando menos memуria)
      #include <a_samp>
      #include <rBits>
      new Bit1:Spawno<MAX_PLAYERS>; // Usei 1bit pq ele armazena apenas valores de 0 e 1. Sгo exatamente os valores que preciso;
      public OnPlayerConnect(playerid)
      {
          Bit1_Set(Spawno, playerid, 0); // Setei a variбvel de para 0 (false) pq ele ainda nгo fez spawn
          return 1;
      }
      public OnPlayerSpawn(playerid)
      {
          Bit1_Set(Spawno, playerid, 1); // Setei a variбvel de para 1 (true) pq ele fez o spawn
          return 1;

      Guardar o ID de veículos na matriz:
      PHP como:
      Código:
      // Normalmente (gastando mais memуria)
      #include <a_samp>
      new Veiculo[21];
      public OnGameModeInit()
      {
          Veiculo[0] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[1] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[2] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[3] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[4] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[5] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[6] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          Veiculo[7] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          //...
          Veiculo[20] = CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000);
          return 1;
      }
      // Com rBits (gastando menos memуria)
      #include <a_samp>
      #include <rBits>
      new Bit8:Veiculo<21>; // Declarei uma variбvel de 8bit pq й o valor minimo que suporta o nъmero 21
      public OnGameModeInit()
      {
          Bit16_Set(Veiculo, 0, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 1, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 2, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 3, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 4, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 5, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 6, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          Bit16_Set(Veiculo, 7, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          //...
          Bit16_Set(Veiculo, 20, CreateVehicle(596, 0.0, 0.0, 0.0, 0.0, 6, 6, 30000));
          return 1;



    :hearts: Notas Finais
    • ♪ Foi uma explicação bem simples, mas procurei ser bem objetivo e claro.
      ♪ Não procuro escrever de forma muito formal e provavelmente haverá erros de escrita, mas os que foram relatados vou corrigir.
      ♪ Qualquer dъvida estarei respondendo
      ♪ Existem outras includes que vocк tambйm poderб economizar alguns bits de memуria, basta dar uma procuradinha pelo fуrum.

    • Creditos: RIQUEP




    [Tutorial] Economizando memória com rBits D07Xwqb
    [Tutorial] Economizando memória com rBits Yjab9HN

      Data/hora atual: Sex 17 maio 2024 - 6:41