Como causar fragmentação de memória em um dispositivo embarcado baseado em Linux?

1

Hardware

ARM

O que estou tentando fazer: Resposta: Eu estou tentando criar fragmentação de memória em um dispositivo embarcado com swapless baseado em Linux 2.6.31.

Por que: Resposta: Eu estou tentando portar alguns patches para o Linux 2.6.31 que irá desfragmentar a memória fragmentada. Para testar se esses patches estão funcionando corretamente, eu gostaria de tentar fragmentar a memória primeiro.

Aprendi que a alocação contínua e a desalocação de memória por aplicativos podem levar à fragmentação. Portanto, escrevi esses programas simples em C.

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    srand(time(NULL));
    int i = 0, j = 0, randnum=0;
    while(1) {

        randnum = rand()%10000000;
        double *ptr = (double*) malloc(sizeof(*ptr) * randnum);

        for(j = 0 ; j < randnum; j++) {
            *(ptr+j) = (double)j+1;
        }

        free(ptr);
    }
}

==========

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    srand(time(NULL));
    int i = 0, j = 0, randnum=0;
    int arr[6] = { 3072, 7168, 15360 , 31744, 64512, 130048}; 
    while(1) {

        for (i = 0; i < 6 ; i++) {

            int *ptr = (int*) malloc(arr[i] * 93);  

            for(j = 0 ; j < arr[i] * 93 / sizeof(int); j++) {
                *(ptr+j) = j+1;
            }

            free(ptr);
        }
    }       
}

Como medir se a memória está fragmentada?: Resposta: Eu olho para o / p de /proc/buddyinfo

Do que eu preciso:? Você pode sugerir uma maneira melhor de fragmentar a memória? Porque esses programas em C funcionam muito lentamente.

    
por abc 07.03.2014 / 00:25

0 respostas