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.