linux — C ++ stdlib.h system () команда не будет работать после выделения 8 ГБ памяти

Я запускаю следующий пример кода под 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;
}

Спасибо за помощь..!

1

Решение

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
2

Другие решения


По вопросам рекламы [email protected]