Citat:
Ursprungligen postat av
Diamondgrit
Om du menar att du kan skriva en egen malloc så är det naturligtvis så. Kan du skriva en egen exit()? Nä, och motsvarande kod (för att rensa upp och sätta returvärde till systemet) måste köras när main är klar ändå.
Kompilatorn tillhandahåller alltid en viss del systemkod. Det är märkligt att räkna med viss kod och inte annan.
Jag förstår hur du menar. Och för ett helt fristående program som äger hårdvaran, så måste man förstås länka med en kodsnutt där första instruktionen anropar main i programmet. Och då kan man naturligtvis också länka med rutiner för minneshantering som definierar malloc och free.
Men antag att du skall skriva en drivrutin som laddas av kärnan. Då är den inte mer fristående än att den måste kunna samexistera med andra drivrutiner. Den använder inte main som entry-point utan något annat som kärnan specificerar. Den kan heller inte länka med egen minneshantering eftersom minnet är en global resurs. För att dela minne måste man således använda systemet kmalloc ohc kfree, eller vad de nu kan heta i det aktuella systemet. Och har de inte samma semantik som vanliga malloc och free, så går det inte heller att wrappa new och delete runt dessa.
Jag skall inte påstå att det inte går att skriva utökningar av kärnan i C++. Anstränger man sig tillräckligt och nöjer sig med en delmängd av språket så kan man säkert få till det. Men eftersom de flesta som kan programmera C++ också kan programmera C, så föredrar nog många att ändå använda C som kan användas rakt av utan några konstigheter.