Tech moves fast! Stay ahead of the curve with Techopedia!
Join nearly 200,000 subscribers who receive actionable tech insights from Techopedia.
Unsafe is a C programming language (C#) keyword used to denote a section of code that is not managed by the Common Language Runtime (CLR) of the .NET Framework, or unmanaged code. Unsafe is used in the declaration of a type or member or to specify block code. When used to specify a method, the context of the entire method is unsafe.
Unsafe code provides good interoperability with unmanaged application programming interfaces (API) or system calls and serves as a compatible interface for third-party dynamic link libraries (DLL), which require pointers for parameter passing. Unsafe code also may be used during debugging, when process content requires inspection or analysis.
Unsafe data refers to allocated memory data that is not controlled by the CLR, such as Windows' handles or pointers allocated via a new method.
Unsafe code refers to a statement or method that accesses unmanaged memory, including:
Unsafe code is primarily used when operations involve pointers and, generally, when code is executed outside of the managed context. Unsafe code compilation requires specification of the "/unsafe" option with the compilation command.
In fully trusted environments, CLR is required for unsafe code execution. However, CLR does not verify unsafe code. CLR supports unsafe code to provide direct access to unmanaged memory code, which is sometimes preferred for performance reasons.
Because CLR maintains type safety and security, C# does not support pointer arithmetic in managed code, unlike C/C++. The unsafe keyword allows pointer usage in unmanaged code. However, safety is not guaranteed because strict object access rules are not followed. For example, pointer operation capabilities are not provided in Java Runtime Environment (JRE).
Unsafe code can create issues with stability and security, due to its inherent complex syntax and potential for memory related errors, such as stack overflow, accessing and overwriting system memory. Extra developer care is paramount to averting potential errors or security risks.