kevés a memória

Fórumok

Hi!

Ha a fordító ilyen hibával áll meg:
"cc1.exe: out of memory allocating 65536 bytes after a total of 18167400 bytes"
, akkor tényleg kevés a memória, vagy van erre valamilyen gyógymód?

Hozzászólások

Milyen fordító, milyen kód, milyen hardware?

Az OS is fontos lehet, pl. 32 bites Windows rendszernel nyugok lehetnek a nagy memoriat igenylo forditasoknal, ugyanigy problemas lehet, ha Linuxon van valami memoriakorlat bevezetve, etc... Nem veletlen, hogy ezeket vegigkerdezzuk.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Nem vagyok nagy specialista, pláne nem Win alatt, de azt sejtem, hogy a kódod lehet a ludas. Hisz maga a fordítás igényelt túl sok memóriát.

Én azt nézném, hogy a kódban nincs-e valami disznóság, mondjuk trükkös #define-ok, amik kibontva valami nagy, fordítási időben generálandó feladatot adnak a fordítónak, esetleg rekurzív #include -láncok.

Avagy a C kód, ami fordul nem kézzel íródott, hanem egy program hibásan generálta. (valamikor szörnyű régen Fortran->C konverzió okozott ilyen agybajokat nekem.)

Elnézést kérek mindenkitől, amiért nem voltam jelen!

A fordító a gcc-4.7.0 djgpp portja, az os Windows 7.
Hasonló hibaüzenettel már korábban is találkoztam, de nem jöttem rá, hogy mi okozza. Ezért kérdezem. :)

A kód a libcaca (http://caca.zoy.org/files/libcaca/libcaca-0.99.beta18.tar.gz), amit nem tudtam lefordítani.

Hogy a bús retekbe lehet ilyen ótvar módon hibát leírni? Teljes szoftverkörnyezet és fordítási napló megadása lenne a minimum. A hibaüzenet egyébként egy rahedli helyen szerepel a neten. Na mindegy.

Annyit már sikerült összebányászni a többi hozzászólásból, hogy a libcaca fordítása szállt el.

Tömören:

(1) A gcc-ben 2003-2004 óta ismerik, de nem tudják megjavítani azt a hibát, hogy nagyméretű array initializer-nél zabálja a memóriát. Lásd:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14179
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12245

(2) Windows alatt egyszerűen nem jut ennyi memória a djgpp-nek. Nemtom miért, ez van, mások is belefutottak már.

http://newsgroups.derkeiler.com/Archive/Comp/comp.os.msdos.djgpp/2007-1…
http://stackoverflow.com/questions/4283259/gcc-2-03-gives-cc1-exe-out-o…

hrgy84 felvetette fentebb, hogy esetleg 32 bites windows-t futtatsz; egyelőre nem látok megerősítést (Ennek is a topiknyitóban kellett volna szerepelnie.)

(3) A libcaca linkelt verziójában:


$ du -h --apparent-size libcaca-0.99.beta18/src/texture.h
371K    libcaca-0.99.beta18/src/texture.h

A header-ben egy internal linkage / static storage duration / konstans tömböt definiálunk. Az inicializációs listában 64K elem szerepel, jó eséllyel ezen fújja fel magát a gcc.

A header-t egyetlen file nyalja be, a "cacademo.c". Auto-fossal nem vagyok hajlandó foglalkozni (vagyis rávenni a Makefile.am-et és társait, hogy ne próbálják ezt a file-t lefordítani), úgyhogy cseréld ki a "cacademo.c" tartalmát arra, hogy

int main(void) { return 0; }

és próbáld újra a fordítást.

(Vagy kísérletezz az -O kapcsolóval.)