16.03.2014, 20:05
Bom Galera , Vou ensinar a Vocкs a Utilizar a include Malloc De ******.
Como alguns Ja sabem Essa funзгo existe em C /C++ Porem com essa include e possivel alocar memoria in pawn
Precisamos da Seguinte include Para iniciar O tutorial :
Aqui Vocк pode encontrar ela.Como alguns Ja sabem Essa funзгo existe em C /C++ Porem com essa include e possivel alocar memoria in pawn
Precisamos da Seguinte include Para iniciar O tutorial :
Bom shittt(merda) Oque e malloc ?
Resposta :
malloc й um termo da computaзгo que designa uma funзгo da biblioteca padrгo das linguagens de programaзгo C e C++ para requisitar alocaзгo dinвmica de memуria. Й uma forma abreviada de escrever memory allocation (alocaзгo de memуria).
Fonte : Wikipedia and ****** .
Perigo !
Antes Vou avisar umas coisinhas : No Malloc em si Pode ser prejudicial ao seu Script , O Sistema de alocaзгo do PAWN ja esta Otimo , Isso e pra quem Procura Mais memoria , Treine com seus Script antes de coloca-los em um FS Ou Gamemode , Pode Ocorrer tambem Problemas de fragmentaзгo De Memoria , Vazamento de Memуria , Buffer Overflow : Escrer na memуria para alem do limite da Arйa Alocada; Uso de areas liberadas tipo escrever numa regiгo onnde a memуria ja foi liberada por Free , Falhas no malloc : se nao houver memуria disponнvel o malloc irб falhar !.
Shittt explica Erros:
Vazamento de Memoria :
Esse Script Nгo irб destruir a memoria criada , Ela continuara ali , Mais vocк vai perde Aquela memуria , Isso significa que Vocк nгo pode mais Apagar Ou ser Utilizada , Basicamente aquela memoria alocada ( 10 ) e algo totalmente Inъtil, Isso se chama Vazamento de Memoria .
Код:
stock MinhaMemoria() { new Alloc:memory = malloc(10); //defini disse que e pra alocar na variavel , 10 de memoria :p }
Fragmentaзгo :
Код:
new a = malloc(11), b = malloc(11), c = malloc(11), d = malloc(11); free(a);//liberei 11 de memoria da variavel a free©;//liberei 11 de memoria da variavel c //total de memуria liberada e 24 . new e = malloc(24);
Valores Indefinidos :
No PAWN todas as variбveis, exceto quando indicado de outra forma, comeзar como 0, nгo й assim com malloc. Se vocк criar uma matriz usando malloc Pode nгo ser todos 0. Isso pode ser bom em algumas circunstвncias (й mais rбpido) e ruim em outros. Para os momentos em que й ruim hб uma funзгo calloc (clear malloc) que irб alocar a memуria e definir tudo para 0.
Falta de memуria :
isso significa que vocк estб tentando alocar mais memуria do que existe.
Out Of Bounds (OOB) :
й quando vocк tenta acessar algo que nгo й, na verdade, em uma matriz. existem dois modos de operaзгo : segura (lento) e inseguro (rбpido)
Rбpido(inseguro) :
Код:
new Alloc:memoria = malloc(10); mset(memoria, 0, 42); //Funзгo mset Mais a frente irei explicar sobre ela !
Код:
new Alloc:memoria = malloc(10); if (memoria) { mset(mem, 0, valor para alocar); } else { // ... }
Comeзando
Como utiliza-la no Pawn ?
Resposta : Simples Depois que baixar-mos a include Vamos definir ela (retardado todos ja sabem, podera ter alguns que estгo comeзando agr ne fio XD).
Код:
#include <malloc>
Funзхes :
Код:
malloc (tamanho para alocar) - Aloca uma regiгo de memуria com o tamanho especificado. livre (slot) - Libera a memуria especificada. mset (slot, нndice , valor) - Coloca o valor dado para a regiгo de memуria especificado no endereзo fornecido. mget (slot, index) - Obtйm o valor no нndice fornecido do slot de memуria especificado. msets (slot, нndice, String) - Como mset mas para strings, irб utilizar-se mais de um slot. mgets (slot, нndice) - Como mget mas para strings, em modo inseguro vocк pode ser capaz de usar mget. Malloc_SlotSize (slot) - Retorna o tamanho de um bloco alocado.
Definiзхes :
Se vocк colocar :
Код:
YSI_MALLOC_NO_SHORT
Код:
Malloc_Set Malloc_Get Malloc_SetS Malloc_GetS
Код:
MALLOC_MEMORY - Nъmero de cйlulas de reserva. MALLOC_MEMORY_KB - Nъmero de killobytes a reserva. MALLOC_MEMORY_MB - Nъmero de megabytes para a reserva. MALLOC_MEMORY_B - Nъmero de bytes para a reserva.
Strings:
Se estiver usando O Metodo inseguro(rбpido)
Para pegar Strings Faзa como o Exemplo
Код:
format(string, sizeof (string), "String: %s", mget(alMyData, 2));
Utilize Este Exemplo de Script :
Код:
e_exempl { e_exempl_primeiro, e_exempl_segundo } new Alloc:Data; main() { Data = malloc(e_exempl); if (Data) { mset(Data, e_exempl_primeiro, 10); } }
Creditos A : ******
Eu Praticamente pouca coisa ...
Flw Erros poste ai que eu corrijo !