Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 05:33

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Plattformunabhängigkeit?

Discussion on Plattformunabhängigkeit? within the General Coding forum part of the Coders Den category.

Reply
 
Old 01/11/2012, 13:28   #16
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by MrSm!th View Post
Was genau passiert mit der Garbadge Collection, wenn man nativ kompiliert?
Die VM, die jene bereitstellt, fällt dann ja weg. Wird einmal allozierte Speicher dann nicht wieder freigegeben?
Immerhin kann der Compiler zur Compile Time ja noch nicht wissen, wann ein Objekt keine Verweise mehr haben wird, also kann er das schlecht da schon einbauen.

Und ein explizites delete gibt es nicht (aus etwas anderen Gründen einer meiner größten Kritikpunkte an Java).
meine vermutung wäre dass der speicher (wie es allen anderen prozessen ist) erst nach dem beenden wieder freigegeben wird, was allerdings erstaunlich scheisse wäre

bin mir aber sicher dass es auch in java delete gibt..
Tyrar is offline  
Old 01/11/2012, 14:46   #17
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Eine Programmiersprache stellt eine Abstraktion von Programmen dar und ohne eine Notation und Standards kann man sie schlecht als Programmiersprache bezeichnen.
Durch eine Notation wird sie logischerweise plattformunabhängig.
C++ bleibt sowohl unter Linux als auch unter Windows C++, sofern es Compiler gibt, die C++ mit dessen Standards unterstützt.
Nur ist C++' Funktionsbibliothek eingeschränkt, sodass man häufig auf das API des OS zurückgreifen muss. Quellcodes mit OS-abhängigen Funktionen sind immernoch plattformunabhängig und lassen sich mit einem funktionieren Compiler überall kompilieren, nur sind die Kompilate eben nicht mehr plattformunabhängig.

Und genau darum geht es bei Plattformunabhängigkeit. Dass eine Programmiersprache unabhängig ist, ist logisch, nur ist die Frage, ob man das Kompilat auf jedem System einfach so ausführen kann.
Natürlich ist es ein großer Unterschied, dass C++ in Maschinencode kompiliert wird und Java in einen Zwischencode, der dann interpretiert wird, oder in Skriptsprachen direkt der Quelltext interpretiert wird und als Programm dient.
In Hinsicht auf Plattformunabhängigkeit ist diese Eigenschaft jedoch belanglos, da es auf die Ausführbarkeit ankommt.

Und da interpretierte Sprachen komplett vom System abstrahiert werden, lassen sie sich auf jedem System ausführen, das einen entsprechenden Interpreter besitzt.

C++ lässt sich auf anderen Systemen genauso neu kompilieren.
Da C++ aber keine abgeschottete Laufzeitumgebung besitzt wie Skriptsprachen oder Java, stößt man schnell an Grenzen wohingegen Source Codes in Java oder Ruby direkt überall ausgeführt werden können.

Quote:
Wird einmal allozierte Speicher dann nicht wieder freigegeben?
Wie wär's mit einem Referenzzähler?
link is offline  
Thanks
4 Users
Old 01/12/2012, 21:59   #18
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Kurz und knapp: sowohl Java als auch C++ oder FORTRAN oder auch Basic sind auf ihre weise systemunabhangig nur bei z.b. Java hat man den Vorteil, dass du deine Programme nur geringfügig anpassen müsst bei c++ aber wahrscheinlich Großteile auf das entsprechende os und die apis anpassen müsst.

Aber auch da gibt es viele aushilfen für viele kompilierten Sprache (große sehr umfangreiche libs die für jedes der großen os erstellt werden)

Kurz und knapp: sowohl Java als auch C++ oder FORTRAN oder auch Basic sind auf ihre weise systemunabhangig nur bei z.b. Java hat man den Vorteil, dass du deine Programme nur geringfügig anpassen müsst bei c++ aber wahrscheinlich Großteile auf das entsprechende os und die apis anpassen müsst.

Aber auch da gibt es viele aushilfen für viele kompilierten Sprache (große sehr umfangreiche libs die für jedes der großen os erstellt werden)
warfley is offline  
Old 01/12/2012, 23:05   #19


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Wie wär's mit einem Referenzzähler?
Der wird doch in der JVM verwaltet oO
Schließlich ist sie für die Garbage Collection zuständig.

Quote:
bin mir aber sicher dass es auch in java delete gibt..
Da liegst du falsch.
MrSm!th is offline  
Old 01/12/2012, 23:42   #20
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Du ummantelst Zugriffe auf alloziierten Speicher mit Prolog- und Epilog-Code, zählst die Referenzen und gibst bei 0 den Speicher wieder frei (siehe Delphi).
link is offline  
Old 01/13/2012, 01:30   #21


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
D.h. nativer Code wird dann größer als der VM Code?
MrSm!th is offline  
Old 01/13/2012, 06:38   #22
 
Kinu's Avatar
 
elite*gold: 10
Join Date: May 2006
Posts: 2,786
Received Thanks: 773
Davon ist auszugehen ja
Kinu is offline  
Old 01/13/2012, 15:10   #23
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
Naja, das doch in jedem Fall :P
Ich kann mir gut vorstellen, dass Java's ByteCode-Instruktionen um einiges komplexer als das x86/x86-x64 Instruction Set sind und man dadurch evtl. weitaus weniger Befehle braucht (die letztendliche Größe der Datei hängt natürlich auch davon ab, wie die Instruktionen im ByteCode kodiert werden, könnte man ja einfach mal testen und vergleichen)

Aber ja, es wird wahrscheinlich viele Overheads geben, dazu kommt bestimmt noch ein großer Startup-Code und verschiedene Prologe und Epiloge für x und y (schätzungsweise alles ein bisschen so wie in Delphi)
link is offline  
Thanks
1 User
Old 01/13/2012, 16:12   #24
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Quote:
D.h. nativer Code wird dann größer als der VM Code?
sehr warscheinlich. die Java VM dient ja nicht nur als interpreter, sondern nimmt auch gewissen code ab, der nicht in das endprodukt geschrieben werden muss.

Den referenz zähler gibt es ja z.b. auch bei Objective C, wo jede von NSObject abgeleitete Klasse einen referenzzähler besitzt (allerdings muss der entwickler diesen selbst im Quellcode ansprechen, d.h. sobald der pointer kopiert wird muss eine bestimmte prozedur aufgerufen werden, und wenn der pointer wieder freigegeben wird das entsprachend gegenstück)

BTW Seit wann unterstützt sowas? (Bin mit meinem D7 wohl ein bisschen zurückgeblieben)

Quote:
D.h. nativer Code wird dann größer als der VM Code?
sehr warscheinlich. die Java VM dient ja nicht nur als interpreter, sondern nimmt auch gewissen code ab, der nicht in das endprodukt geschrieben werden muss.

Den referenz zähler gibt es ja z.b. auch bei Objective C, wo jedes von TObject abgeleitete Objekt einen referenzzähler besitzt (allerdings muss der entwickler diesen selbst im Quellcode ansprechen, d.h. sobald der pointer kopiert wird muss eine bestimmte prozedur aufgerufen werden, und wenn der pointer wieder freigegeben wird das entsprachend gegenstück)

BTW Seit wann unterstützt sowas? (Bin mit meinem D7 wohl ein bisschen zurückgeblieben)
warfley is offline  
Reply




All times are GMT +1. The time now is 05:34.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.