¿Cuáles son las limitaciones del código inseguro, en C#? Por ejemplo, ¿puedo hacer moldes de punteros y aritmética casi arbitrariamente como si estuviera usando C o C++?Código no seguro en C#
Respuesta
Sí. All bets are off cuando no es seguro está en juego.
Esta es la idea detrás de "inseguro": que se elimina la "seguridad" de los tipos verificables, y puede convertir desde un puntero de un tipo a un puntero de otro tipo sin que el tiempo de ejecución lo mantenga shooting yourself in the foot, si así que deseo, al igual que C o C++.
He aquí un ejemplo del uso de diferentes tipos de puntero en C#:
fixed (Byte* dstBytes = ¤tImage[0])
{
var dstBuffer = (Int64*)dstBytes;
const int blockCount = ImageSizeInBytes/sizeof(Int64);
for (var j = 0; j < blockCount; j++)
{
dstBuffer[j] = srcBuffer[j];
}
}
Nota del tipo de la matriz es Byte[]
, pero después de obtener un Byte*
puedo echarlo a Int64*
y trabajar con 8 bytes a la hora.
Sí, puede hacer un puntero en cualquier lugar que desee.
Sin embargo, como su programa se ejecuta en un espacio de direcciones virtual, solo puede acceder a la memoria que realmente existe en ese espacio, es decir, no puede acceder a ningún otro proceso y no puede acceder a la memoria que no t sido asignado.
Puede consultar la página siguiente para más información:
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
código no seguro proporciona la capacidad para declarar punteros para prácticamente cualquier variable primitiva (tipos fundamentales); puedes lanzar entre tipos de puntero. La aritmética del puntero se basa en el tamaño de almacenamiento del tipo de puntero, por lo que la aplicación de post-incremento o post-decremento a un puntero aumentará la dirección por tamaño de (tipo).
Sí, eso es todo posible. Aquí está el Unsafe Code Tutorial de MSDN.
Para todos aquellos que dicen que usar esto es una idea horrible: sí, pero está ahí por una razón. Tuve que usar esto (por primera vez) recientemente, obtener datos de la cámara web a través de una API de terceros que devolvió Byte *
.
- 1. cómo compilar código no seguro en C#
- 2. ¿Es seguro el siguiente código C?
- 3. Código seguro contra inseguro
- 4. ¿Cómo puedo usar un código no seguro en VB.Net?
- 5. Escribir código de cacao seguro
- 6. firma automática de código "seguro"
- 7. Código python más seguro ejecutando
- 8. Escritura de código seguro de excepciones multiproceso
- 9. No estoy seguro de cuándo usar excepciones en C++
- 10. Código GPGPU no confiable (OpenCL, etc.): ¿es seguro? ¿Qué riesgos?
- 11. Comprobando que el siguiente código no es seguro para hilos
- 12. ¿Por qué este código no es seguro para subprocesos?
- 13. por qué "f = f ++" no es seguro en c?
- 14. ¿No es seguro lanzar excepciones desde librerías C++ enlazadas estáticamente?
- 15. ¿Es seguro mantener los punteros de C++ en C#?
- 16. java.text.SimpleDateFormat no es seguro
- 17. C++ Segmento seguro para subprocesos
- 18. lugar seguro para guardar el código
- 19. ¿Es seguro volver a va_list en C?
- 20. Registro asíncrono seguro de subprocesos en C++
- 21. C# Singleton seguro para subprocesos
- 22. Limpiar el código no deseado C#
- 23. ¿NHibernate SchemaUpdate es seguro en el código de producción?
- 24. ¿Por qué -freciprocal-math no es seguro en GCC?
- 25. Costo de websocket seguro vs. websocket no seguro
- 26. Cómo escribir código seguro/correcto de subprocesos múltiples en .NET?
- 27. ¿Hay puntero en C# como C++? ¿Es seguro?
- 28. ¿Es seguro usar la palabra python "tipo" en mi código?
- 29. Emacs y el error no seguro servidor
- 30. ¿Cuál es la diferencia entre el código inseguro y el código no administrado en C#?
+1 Para el enlace, (y una buena respuesta). – Sam