Прогеры Хелп (линух)

Статус: Offline
Реєстрація: 23.01.2005
Повідом.: 7516
Прогеры Хелп (линух)

сам к сожелению дуб дерево в энтом деле.
нуна такая вот мелкая помощь

изучая статистику использования памяти я обнаружил что количество памяти исползуемой системой (в общем) можно сокротить. это относиться к системам всех типов (но с серверами разговорами разговор отдельный).

суть вот в чем:
почти все проги юзают "keeping reserve fo future use" (чет я пока это не использующих не встречал)

я это смог подвердить следующим эксперементом :

запускаю машину (слака 11 кернел 2.6.19) смотрю занятую память - 60 мб.
запускаю иксы, для интереса запускаю разные проги (путтю, фаерфокс, етк).
смотрю занятую память еще раз - 130 мб занято, своп чист. далее запускаю вайн и в нем любую "виндовую чистилку памяти". и что я вижу - занято только 60 мб .
в свопе всего 20 метров. далее выгружаю вайн и оппа 40 метров. (фаерфокс все еще в памяти).

как видите картина ну как бы для домашней машины грустная.

почитал man malloc и увидел выход так вот в чем ищу помощи:

люди добрые напишите программку маленькую делающую такое :

СИНТАКСИС
#include <stdlib.h>

void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);

ОПИСАНИЕ
calloc() выделяет память для массива из nmemb элементов по size байт каждый, и возвращает указатель на выделенную память.
Выделенная память обнуляется.

malloc() выделяет size байт и возвращает указатель на выделенную память. Выделенная память не инициализируется.

free() освобождает область памяти, на которую указывает ptr, которая быть выделена ранее посредством malloc(), calloc()
или realloc(). Иначе, если free(ptr) был уже вызван ранее, результат операции не определен. Если ptr равен NULL, то
ничего не происходит.

получить сколько всего памяти (физической)
вделить всю допустимую память
отчистить


плиз сделайте кто нить код очень вас прошу
 
Выделяет всю память кусками по 1 - мб

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

#define MEGABYTE 1024*1024

int main(int argc, char *argv[])
{
void *myblock = NULL;
int count = 0;

while(1)
{
myblock = (void *) malloc(MEGABYTE);
if (!myblock) break;
memset(myblock,1, MEGABYTE);
printf("Currently allocating %d MB\n",++count);
}
exit(0);

}
 
Вся доступная RAM
cat /proc/meminfo | grep MemTotal
 
заняв всю память (по top) машина наглуха повисла.
 
Назад
Зверху Знизу