Я хотел проверить, могу ли я с несколькими процессами использовать более 4 ГБ оперативной памяти в 32-битной ОС (мой: Ubuntu с 1 ГБ оперативной памяти).
Итак, я написал небольшую программу, которая использует malloc чуть меньше 1 ГБ, выполняет некоторые действия с этим массивом и запускает 5 экземпляров этой программы для разветвления.
Дело в том, что я подозреваю, что ОС убила 4 из них, а выжил только один и выдал "PID: Я закончил").
(Я пробовал это с небольшими массивами и получил 5 распечаток, также, когда я смотрю на запущенные процессы с помощью TOP, я вижу только один экземпляр..)
Странно вот что: я получил код возврата 0 (успех?) во ВСЕХ экземплярах, включая те, которые якобы были убиты ОС.
Я не получил никакого сообщения о том, что процессы были убиты.
Является ли этот код возврата нормальным для данной ситуации?
(Если это так, это снижает мое доверие к «кодам возврата»…)
благодаря.
Редактировать: некоторые ответы предполагали возможные ошибки в небольшой программе, так что вот она. большая программа, которая разветвляет и сохраняет коды возврата, больше, и у меня возникли проблемы с загрузкой ее сюда, но я думаю (и надеюсь), что все в порядке.
Также я заметил, что если вместо того, чтобы запускать его с моей программой разветвления, я запускаю его с помощью терминала, используя «./a.out & ./a.out & ./a.out & ./a.out &» (когда ./a.out — это двоичный файл прикрепленной небольшой программы) Я вижу несколько сообщений «Убито».
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define SMALL_SIZE 10000
#define BIG_SIZE 1000000000
#define SIZE BIG_SIZE
#define REAPETS 1
int
main()
{
pid_t my_pid = getpid();
char * x = malloc(SIZE*sizeof(char));
if (x == NULL)
{
printf("Malloc failed!");
return(EXIT_FAILURE);
}
int x2=0;
for(x2=0;x2<REAPETS;++x2)
{
int y;
for(y=0;y<SIZE;++y)
x[y] = (y+my_pid)%256;
}
printf("%d: I'm over.\n",my_pid);
return(EXIT_SUCCESS);
}