Sample 1
을 컴파일 할 때 내 RAM을 모두 사용하면서 컴퓨터가 손상되는 이유는 무엇입니까? Sample 2
즉시 컴파일하지 않고 컴파일합니까?대용량의 객체 배열을 사용한 메모리 사용
샘플 1 :
class Foo
{
int a = 0;
};
class Test
{
Foo foo[4000000] = {};
};
int main()
{
Test t;
}
샘플 2 :
class Foo
{
int a = 0;
};
int main()
{
Foo foo[4000000] = {};
}
마지막으로, 컴파일 할 때 RAM의 톤을 사용하는 샘플 1을 막을 수있는 방법은 무엇입니까? 나는 gcc version 5.3.0
을 사용하고 있는데 위의 내용은 -std=c++11
으로 컴파일되었습니다. class Test
은 단지 16MB의 메모리 만 있으면됩니다.
모든 경우
'그것은 내 모든 RAM을 사용하고 컴퓨터가 충돌합니다. 'GCC가 그렇게한다면 그것은 분명히 컴파일러 버그입니다. – user6412786
매혹적인. gcc가'Test' 클래스에있는'Foo'의 4 백만 인스턴스 각각을 초기화하는 코드를 생성하여 객체의 생성자를 생성하려고 시도하고 있습니다. GCC가 두 번째 예제에서와 같은 방식으로이를 수행 할 수없는 이유는 무엇인지 모르겠습니다. 추신 'class test'는 16MB의 메모리, int 당 4 백만 * 4 바이트를 필요로합니다. –
최적화되지 않은 코드를 생성 한 다음 최적화하는 것은 대단히 비합리적이지 않습니다. 분명히이 경우 극단적으로 차선책의 결과를 산출합니다. –