frankx: Speicherverwaltung und Objektorientierung in C

Beitrag lesen

Hellihello

für mich stehen mittlerweile zwei Fragen eher abstrakter Art im Raum.

C reizt ja dazu, den Speicher, wenn man ihn schon selbst verwalten muss/kann, auch optimal zu nutzen. Bei so einer String-Action ist für mich nicht klar, wie sowas optimal zu lösen ist. Schon beim Einlesen mit fgets Zeilenweise wird ja Speicher belegt. In Zeilenlänge. Da ich beim CSV bestenfalls nur die Kommas in '\0' umzuwandeln muss, könnte ich ja die Zeile so lassen, die Kommas durch Nullen ersetzen und Stringpointer für die einzelnen Zellen auf diesen Zeilenspeicher setzen. Ist es aber möglich, den beim Einlesen durch fgets automatisch reservierten Speicher per malloc persistent zu machen. Oder denk ich da was falsch. Muss man immer ein Kopie davon irgendwo anlegen? Und weiter, ist es besser, den Zelleninhalt einzeln zu allokieren, oder besser eine größeres Stück in einem (Zeile fortlaufend, darin die Zellen). Platzmäßig ist das ja wohl egal. Eher eine Fragmentierungsfrage. Oder aber ist es am Besten, gleich die komplette Größe der einzulesenden CSV-Datei zu ermitteln und soviel en-bloc im Arbeitsspeicher zu definieren?

Da es keine Objekte/Strukturen mit Methoden gibt, in denen dann per "this" oder "self" auf Klassen/Strukturvariablen zugreifen kann, muss man das zu bearbeitende Objekt ja immer per Speicheradressenangabe rumreichen. Entweder man lässt sich eine Speicheradresse zurückgeben, oder man übergibt eine,  deren Inhalt mit der Funktion dann manipuliert wird. Sind denn größere Projekte damit dann objektorientierungslike genauso übersichtlich realisierbar. Relativ abstrakt gesehen sind Klassen ja zum Teil "nur" Namensräume innerhalb derer dann interne "globale" Variablen definierbar sind. Diese Strukturierungsmöglichkeit fehlt ja bei C. Mit der Funktionsbenennung lässt sich da vermutlich noch ein Teil strukturieren. Ist also ObjectivC oder C++ dann die Folge, oder gibt es Gründe, bei C zu bleiben?

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt