Speicherverwaltung in C

29/03/2011 - 08:58 von jens | Report spam
Hi,
scheinbar ist die erste Version dieser Nachricht verschollen... hmmm

Ich habe eine interessante Idee fuer eine Speicherverwaltung in "C".
Bei dieser Idee werden sehr viel weniger Pointer Operationen verwendet
als gewöhnlich.

Ich hoffe auf Kritik und Kommentare.

Den Source gibt es hier:
https://docs.google.com/leaf?id 2y_v80JRX9RYzUxZDdhYWMtZmZjZS00YmM4LWJjMDktZWQyNzdmYzAwN2Iy&sort=name&layout=list&numP

jens
 

Lesen sie die antworten

#1 Markus Wichmann
29/03/2011 - 11:13 | Warnen spam
jens wrote:
Hi,
scheinbar ist die erste Version dieser Nachricht verschollen... hmmm




Nicht nur scheinbar, auch anscheinend.

Ich habe eine interessante Idee fuer eine Speicherverwaltung in "C".
Bei dieser Idee werden sehr viel weniger Pointer Operationen verwendet
als gewöhnlich.

Ich hoffe auf Kritik und Kommentare.

Den Source gibt es hier:
https://docs.google.com/leaf?id 2y_v80JRX9RYzUxZDdhYWMtZmZjZS00YmM4LWJjMDktZWQyNzdmYzAwN2Iy&sort=name&layout=list&numP

jens



Zunàchst handwerkliche Anmerkungen: Fix mal dein Build System. "make
clean" funktioniert hàufig nicht, weil du nur "rm" benutzt statt "rm -f".

Was soll eigentlich sowas hier?

int main(int argc, char ** argv)
{
(void) argc; (void) argv;

Ja, warum deklarierst du main() überhaupt mit Parametern, wenn du gleich
drunter schreibst, dass du sie nicht zu benutzen gedenkst?

Und diesen deb_err() und deb_warn()-Kram in die
Speicherallokationsbibliothek zu packen ist auch reichlich gewagt.

Und du castest die Ausgabe von malloc(). Das ist richtig schlechter
Stil, wenn der Code nicht gerade auch als C++ durchgehen soll und kann
die auf 64-bit-Architekturen um die Ohren fliegen (lache nicht, ich hab
erst eine làngliche Debugging-Session hinter mir, bei der sich
rausstellte, dass der Fehler ein fehlender Prototyp war).

Und was soll eigentlich sowas hier?

if( fork() ) { puts("*** Not init."); m_create(10,1); }

fork() gibt an den Kindprozess eine 0 zurück. D.h. der Elternprozess
soll hier irgendwas schreiben und dann m_create() aufrufen. Und dann
machen beide gleichzeitig weiter? Wo liegt der Sinn?

Du erzeugst noch einen ganzen Haufen weiterer Prozesse. Und wieder: Wozu?

example1 kann ich schonmal nicht kompilieren:
bison -d mls2parse.y
flex -omls2lex.c mls2lex.l
cc -DMLS_DEBUG -g -I../ -DMLS_DEBUG -g -I../ test-parse.c ../mls.o
mls2parse.tab.c mls2lex.c -o test-parse
test-parse.c: In function ‘item_list_free’:
test-parse.c:60:1: error: expected declaration or statement at end of input
test-parse.c:60:1: error: expected declaration or statement at end of input
mls2parse.y: In function ‘yyparse’:
mls2parse.y:56:39: error: dereferencing pointer to incomplete type
mls2parse.y:56:80: error: dereferencing pointer to incomplete type
mls2parse.y:57:31: error: dereferencing pointer to incomplete type
mls2parse.y:63:39: error: dereferencing pointer to incomplete type
mls2parse.y:63:80: error: dereferencing pointer to incomplete type
mls2parse.y:65:13: error: invalid application of ‘sizeof’ to incomplete
type ‘struct item_st’
mls2parse.y:66:10: error: dereferencing pointer to incomplete type
make: *** [test-parse] Fehler 1

Und ansonsten sieht der Kram aus, als hàttest du dir die Arbeit gemacht,
djb's stralloc-Bibliothek in schlechtem Stil und fehlerhaft
nachzuprogrammieren. Was soll das ganze letztlich eigentlich werden?


Tschö,
Markus

Ähnliche fragen