kevés a memória

 ( begyu | 2012. május 31., csütörtök - 13:41 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

Milyen OS, milyen disztro?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Mi a háttérképed?

--------------------------------------
Unix isn't dead. It just smells funny.

És milyen színű a számítógép?

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

""cc1.exe: out of memory allocating 65536 bytes after a total of 18167400 bytes""

szerinted milyen OS? ;)

DOS?

Szerintem Linux meg wine, mert valami idiota kornyezetet hasznal. Nem veletlen kerdezek ilyesmit, hidd el. Es meg az sem mindegy, hogy milyen Windows, ha az.
--
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.

DJGPP-vel foglalkoztam anno, lehet, hogy a Win7 nem tetszik neki. Illetve a cwsdpmi-vel próbálhatsz esetleg swap-et adni neki, mintha lehetne.

Meg más gcc, caca verziókkal próbálkozhatsz.

Meg melyik file fordításába hal bele?

>Meg melyik file fordításába hal bele?

Melóhelyen próbáltam, most itthon nem tudom megnézni, mivel nincs Windows-om.

Ez a cwsdpmi swap jó ötletnek tűnik, kösz a tippet!

GCC 4.7.0 March 22, 2012

Biztos, hogy a legfrissebb már-éppen-talán-nem-teljesen-béta gcc verziót kell windows-on tesztelned? Mert ugye ezt nem windows-on fejlesztik, úgy kell áthekkelnie valakiknek windows-ra...

Mazochista vagyok.

A djgpp még csak nem is wines, hanem dos-os.
Ha a dos nem cél, akkor mingwt ajánlanám.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Naiv kerdes: vajon miert hasznal valaki egy DOS-os forditot, amikor tonnanyi windowsos van? Esetleg DOS-ra fordit?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

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-10/msg00065.html
http://stackoverflow.com/questions/4283259/gcc-2-03-gives-cc1-exe-out-of-memory-alloction-error-while-compilation-with-3

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.)

++: Hogy a bús...

esetleg a gcc opciok közül kivenni: -pipe, -j, -l