Kadang-kadang saya mendengar / membaca tentang hal itu ketika berbicara tentang .NET, misalnya "kode yang dikelola" dan "kode yang tidak dikelola" tetapi saya tidak tahu apa itu dan apa perbedaannya. Apa perbedaan mereka, menurut definisi? Apa konsekuensi dari menggunakan salah satunya? Apakah perbedaan ini hanya ada di .NET / Windows?
139
Jawaban:
Kode yang Dikelola
Kode yang dikelola adalah apa yang dibuat oleh kompiler Visual Basic .NET dan C #. Ini berjalan pada CLR (Common Language Runtime), yang, antara lain, menawarkan layanan seperti pengumpulan sampah, pemeriksaan jenis waktu proses, dan pemeriksaan referensi. Jadi, anggap saja sebagai, "Kode saya dikelola oleh CLR."
Visual Basic dan C # hanya dapat menghasilkan kode yang dikelola, jadi, jika Anda menulis aplikasi dalam salah satu bahasa tersebut, Anda menulis aplikasi yang dikelola oleh CLR. Jika Anda menulis aplikasi dalam Visual C ++ .NET Anda dapat menghasilkan kode terkelola jika Anda suka, tetapi itu opsional.
Kode Tidak Terkelola
Kode yang tidak dikelola mengkompilasi langsung ke kode mesin. Jadi, dengan definisi itu semua kode yang dikompilasi oleh kompiler C / C ++ tradisional adalah 'kode tidak terkelola'. Juga, karena ia mengkompilasi ke kode mesin dan bukan bahasa perantara, ia tidak portabel.
Tidak ada manajemen memori bebas atau apapun yang disediakan CLR.
Karena Anda tidak dapat membuat kode tidak terkelola dengan Visual Basic atau C #, di Visual Studio semua kode tidak terkelola ditulis dalam C / C ++.
Mencampur keduanya
Karena Visual C ++ dapat dikompilasi ke kode yang dikelola atau tidak, dimungkinkan untuk menggabungkan keduanya dalam aplikasi yang sama. Ini mengaburkan garis antara keduanya dan memperumit definisi, tetapi perlu disebutkan hanya agar Anda tahu bahwa Anda masih dapat mengalami kebocoran memori jika, misalnya, Anda menggunakan pustaka pihak ketiga dengan beberapa kode tidak terkelola yang ditulis dengan buruk.
Berikut contoh yang saya temukan dengan googling :
#using <mscorlib.dll> using namespace System; #include "stdio.h" void ManagedFunction() { printf("Hello, I'm managed in this section\n"); } #pragma unmanaged UnmanagedFunction() { printf("Hello, I am unmanaged through the wonder of IJW!\n"); ManagedFunction(); } #pragma managed int main() { UnmanagedFunction(); return 0; }
sumber
Ini lebih umum daripada .NET dan Windows. Dikelola adalah lingkungan tempat Anda memiliki manajemen memori otomatis, pengumpulan sampah, keamanan jenis, ... tidak terkelola adalah segalanya. Jadi misalnya .NET adalah lingkungan yang dikelola dan C / C ++ tidak dikelola.
sumber
Kode yang dikelola adalah diferensiasi yang diciptakan oleh Microsoft untuk mengidentifikasi kode program komputer yang memerlukan dan hanya akan dijalankan di bawah "manajemen" mesin virtual Waktu Proses Bahasa Umum (menghasilkan Bytecode).
http://en.wikipedia.org/wiki/Managed_code
http://www.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm
sumber