Em 06/07/07, Rúben Lício<[EMAIL PROTECTED]> escreveu:
On 7/6/07, Denis <[EMAIL PROTECTED]> wrote:
> Em 06/07/07, Rúben Lício<[EMAIL PROTECTED]> escreveu:
> > On 7/6/07, Denis <[EMAIL PROTECTED]> wrote:
> > > Galera, boa tarde.
> > >
> > > Alguem sabe alguma maneira que eu possa alocar uma certa quantidade de
> > > memoria e depois liberar, apenas para testes?
> > >
> > > Tenho um sistema de gerenciamento de jobs no qual o usuário tem que
> > > informar o tanto de memória que o job dele irá usar. Eu impus um
> > > limite e agora quero testar se está funcionando.
> > >
> > > Como posso fazer um programa ou script ou comando ou qq coisa utilizar
> > > o tanto de memória que eu especificar enquanto estiver rodando?
> > >
> > > Por exemplo 10GB de memória.
> > >
> > >
> > > Obrigado.
> > >
> > > Denis.
> > > CCNA CSCO11109942
> > >
> > >
> >
> > Em shell acho que você não consegue não. Mas em C sim.
> > char *teste = calloc(1000000000, sizeof(char));
> > você alocou 1mb para caracteres.
> > Porém, eu não sei qual a finalidade disso para você. Se for para
> > memória continua, isso é valido, porém se não for, ai terá de fazer
> > uma lista encadeada.
> >
> > Se a necessídade é apenas verificar a disponibilidade de memória no
> > sistema, ou a quantidade usada por um job especifico, existem soluções
> > muito melhores para isso, como a api do sistema operacional.
>
> Bom, não entendi muito bem, então vou explicar melhor:
>
> Tenho uma máquina onde os usuários submetem jobs para execução, quando
> eles submetem os jobs eles indicam o número de processadores e a
> quantidade de memória que o job dele vai precisar.
>
> Eu impus um limite, de que cada job não deve utilizar mais que x de
> memória, então eu quero simular um job, onde utilize X+1 de memória
> para ver se o bloqueio está funcionando, entendeu?
>
> por exemplo um script qualquer que quando eu rode vá consumindo a
> memória de 0 até x+1.
>
>
> Melhorou a explicação?
>
>
> >
> > --
> > Rúben Lício Reis
> >
> > Game Developer
> > Linux user #433535
> >
>
void main()
{
char *x = malloc(10+1);
if (!x)
printf("nao conseguiu alocar");
else
printf("conseguiu alocar a memoria corretamente");
}
isso é o programa em C para alocar 11 bytes. Se quiser 1k, só fazer
1024+1 e assim por diante, o +1 é exatamente o que você precisa.
Se vir a mensagem de nao conseguiu alocar quando executar, é pq
funcionou, ou realmente n tinha memoria livre e continua suficiente
para atender a demanda...
--
Rúben Lício Reis
Game Developer
Linux user #433535
Cara, até me esforcei pra usar isso que vc mandou...mas :(
[EMAIL PROTECTED]:~> gcc testa_mem
/usr/lib/gcc/ia64-suse-linux/4.1.0/../../../../ia64-suse-linux/bin/ld:testa_mem:
file format not recognized; treating as linker script
/usr/lib/gcc/ia64-suse-linux/4.1.0/../../../../ia64-suse-linux/bin/ld:testa_mem:1:
syntax error
collect2: ld returned 1 exit status
[EMAIL PROTECTED]:~> mv testa_mem testa_mem.c
[EMAIL PROTECTED]:~> gcc testa_mem.c
testa_mem.c: In function âmainâ:
testa_mem.c:3: warning: incompatible implicit declaration of built-in
function âmallocâ
testa_mem.c:6: warning: incompatible implicit declaration of built-in
function âprintfâ
testa_mem.c:2: warning: return type of âmainâ is not âintâ
[EMAIL PROTECTED]:~>
[EMAIL PROTECTED]:~> cat testa_mem.c
void main()
{
char *x = malloc(10+1);
if (!x)
printf("nao conseguiu alocar");
else
printf("conseguiu alocar a memoria corretamente");
}
[EMAIL PROTECTED]:~>
Não era simples assim? rs
Denis