Anmelden

View Full Version : 16MB Grenze in C Programmen umgehen



schatte
04-10-06, 11:43
Hallo an alle,

in einer Anwendung muss ich mit dem Befehl malloc() mehr als 16 MB reservieren. Jedoch hat die AS/400 damit ein Problem.

Hier mal ein kleines Testprogramm:



int main ( void )
{
char *test;

/* Geht nicht */
test = (char*)malloc(17 * 1024 * 1024);
free(test);

/* Geht */
test = (char*)malloc(15 * 1024 * 1024);
free(test);

return 0;
}

Im Befehl CRTCMOD gibt es die Option Teraspace einschalten. Dies kann aber zu Problemen mit anderen Programmen und mit anderen Aktivierungsgruppen geben.

Gibt es noch eine anderen Möglichkeit die 16 MB Grenze zu umgehen? Wir verwenden V5R3.

Gruß
Matthias Schatte

Fuerchau
04-10-06, 11:59
Eine andere Möglichkeit gibt es da nicht.
Du kannst doch eine eigene Aktivierungsgruppe verwenden und Teraspace dann verwenden.

Soweit ich weiß besteht das Problem nur, wenn ich einen zusammenhängenden Bereich >16MB benötige. Das halte ich aber für sehr unübersichtlich.
Ich denke mehrere kleinere alloc's können insgesamt über 16 MB gehen. Also arbeite mit Verpointerung der Daten oder Listen von Strukturen usw.

Ansonsten schau mal nach HEAP-API's.

schatte
04-10-06, 15:22
Vielen Dank für die schnelle Antwort.

Damit werd ich es dann mal versuchen.