Я запускаю следующий пример кода под Ubuntu 13.04 64bit с установленной памятью 16 ГБ, используя набор инструментов компилятора Intel 14.
У меня возникла проблема, связанная с системой («сделай что-нибудь плохое»), которая не будет работать после моего заявления
выделение в определенной точке.
После нескольких часов борьбы с проблемой я понял, что тот факт, что я выделяю 8 ГБ памяти в этот определенный момент, не позволяет мне использовать команду system () в дальнейшем.
Само собой разумеется, что до того, как я выделю эту память, я могу свободно пользоваться системой.
Фрагмент кода:
#include <string.h>
#include <iostream>
#include "stdlib.h"
int main() {
char ** buffer = new char*[100];
system("logger TRYING..!");
for(int i= 1; i<=80; i++)
{
buffer[i] = new char[200*1000*1000];
}
system("logger SUCCESS..!");
return 0;
}
Спасибо за помощь..!
system
звонки fork
, который будет по существу удвоить необходимую оперативную память от вашего процесса. Поскольку вы используете 8 ГБ и только 16 ГБ, вам не хватает, и fork
выходит из строя. Это сказало, fork
реализован со страницами копирования при записи, что означает, что если вы не измените память дочернего процесса, ОЗУ фактически не будет дублироваться. В этом случае вы не будете писать в эту память, но ОС этого не знает, поэтому fork
выходит из строя. Вы должны подтвердить это, проверив возвращаемое значение для system
(-1 если fork
не удалось).
Вы могли бы попытаться включить память overcommit, чтобы позволить вам, ну, «overcommit memory». Это должно позволить fork
добиться успеха. В вашем случае, я бы, вероятно, включил его только временно.
# Enable overcommit
echo 1 > /proc/sys/vm/overcommit_memory
# Disable overcommit
echo 0 > /proc/sys/vm/overcommit_memory