Я хотел проверить, смогу ли я использовать более чем 4 ГБ оперативной памяти на 32-битном O.S (мой: Ubuntu с 1 ГБ оперативной памяти).
Итак, я написал небольшую программу, которая занимает немного меньше 1 ГБ, и выполнил какое-то действие с этим массивом, и запустил 5 экземпляров этой программы.
Дело в том, что я подозреваю, что О. убил 4 из них, и только один выжил и показал, что "ПИД: я закончил").
(я пробовал это с небольшими массивами и получил 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);
}