Мне нужны идеи о том, как записать программу C, которые резервируют указанную сумму RAM МБ до ключа [напр. любая клавиша] нажата в системе Linux 2.6 32 битов.
*
/.eat_ram.out 200
# If free -m is execute at this time, it should report 200 MB more in the used section, than before running the program.
[Any key is pressed]
# Now all the reserved RAM should be released and the program exits.
*
Это - базовая функциональность программы [резервирующий RAM], я не знаю, как сделать, получив аргументы от командной строки, печатая [Любая клавиша нажата], и так далее не проблема от меня.
Какие-либо идеи о том, как сделать это?
calloc ()
- это то, что вам нужно. Он зарезервирует память для вашего процесса и запишет в него нули. Это гарантирует, что память действительно выделена для вашего процесса. Если вы malloc ()
используете большую часть памяти, ОС может быть ленив в выделении памяти для вас, фактически выделяя ее только тогда, когда она записывается (что никогда не произойдет в этом случае).
Для этого вы хотите использовать malloc (). В зависимости от ваших потребностей вы также захотите:
В большинстве случаев вам подойдут функции malloc () и memset () (или calloc (), которые фактически делают то же самое).
Наконец, конечно, вы хотите освободить () память, когда она больше не нужна.
Разве вы не можете просто использовать malloc ()
для выделения этой оперативной памяти вашему процессу? Это зарезервирует для вас эту оперативную память, и тогда вы сможете делать с ней все, что захотите.
Вот вам пример:
#include <stdlib.h>
int main (int argc, char* argv[]) {
int bytesToAllocate;
char* bytesReserved = NULL;
//assume you have code here that fills bytesToAllocate
bytesReserved = malloc(bytesToAllocate);
if (bytesReserved == NULL) {
//an error occurred while reserving the memory - handle it here
}
//when the program ends:
free(bytesReserved);
return 0;
}
Если вам нужна дополнительная информация, загляните на страницу руководства ( man malloc
в оболочке Linux). Если вы не работаете в Linux, посмотрите онлайн-страницу руководства .
Вам потребуется:
malloc ()
, чтобы выделить необходимое количество байтов ( malloc (200000000)
или malloc (20 * (1 << 20))
). getc ()
ждать нажатия клавиши. free ()
для освобождения памяти. Это должно сработать. Хотя мне удалось зарезервировать больше ОЗУ, чем я установил, это должно работать для допустимых значений, тем не менее.
#include <stdio.h>
#include <stdlib.h>
enum
{
MULTIPLICATOR = 1024 * 1024 // 1 MB
};
int
main(int argc, char *argv[])
{
void *reserve;
unsigned int amount;
if (argc < 2)
{
fprintf(stderr, "usage: %s <megabytes>\n", argv[0]);
return EXIT_FAILURE;
}
amount = atoi(argv[1]);
printf("About to reserve %ld MB (%ld Bytes) of RAM...\n", amount, amount * MULTIPLICATOR);
reserve = calloc(amount * MULTIPLICATOR, 1);
if (reserve == NULL)
{
fprintf(stderr, "Couldn't allocate memory\n");
return EXIT_FAILURE;
}
printf("Allocated. Press any key to release the memory.\n");
getchar();
free(reserve);
printf("Deallocated reserved memory\n");
return EXIT_SUCCESS;
}