La cantidad de espacio de pila utilizado en un procesador x86 de 32 bits para pasar argumentos de varios tipos:
- byte: 4 bytes
- bool: 4 bytes
- enum: 4 bytes
- Char: 4 bytes
- corto: 4 bytes
- int: 4 bytes
- largo: 8 b ytes
- float: 4 bytes
- doble: 8 bytes
- decimal: 16 bytes
- struct: Tamaño de tiempo de ejecución de la estructura
- cadena: 4 bytes
- array: 4 bytes
- objeto: 4 bytes
- interfaz: 4 bytes
- puntero: 4 bytes
- instancia de clase: 4 bytes
Los debajo de la línea son los tipos de referencia, su tamaño se duplicará en un procesador de 64 bits.
Para una llamada de método estático, los primeros 2 argumentos que tienen hasta 4 bytes se pasarán a través de registros de CPU, no de la pila. Para una llamada de método de instancia, solo se pasará un argumento a través de registros. El resto se pasa en la pila. Un procesador de 64 bits admite pasar 4 argumentos a través de registros.
Como se ve claramente en la lista, la única vez que debe considerar pasar un argumento por ref es para las estructuras. La orientación normal para esto es hacerlo cuando la estructura es más grande que 16 bytes. No siempre es fácil adivinar el tamaño del tiempo de ejecución de una estructura, hasta 4 campos generalmente serían precisos. Menos si esos campos son dobles, largos o decimales. Esta guía generalmente recomienda convertir su estructura en una clase, precisamente por esta razón.
También tenga en cuenta que no tiene ahorros pasando un argumento como byte o corto intencionalmente, un int es del tipo con el que está satisfecho un procesador de 32 bits. Lo mismo para los procesadores de 64 bits actualmente disponibles.
Un valor de retorno de método, el verdadero tema de su pregunta casi siempre se devuelve en un registro de la CPU. La mayoría de los tipos se ajustan cómodamente en los registros eax o edx: eax, un registro FPU para valores de coma flotante. Las únicas excepciones son estructuras grandes y decimales, son demasiado grandes para ajustarse a un registro. Se llaman reservando espacio en la pila para el valor de retorno y pasando un puntero de 4 bytes a ese espacio como argumento para el método.
Creo que te estás confundiendo; devolvería una referencia a una matriz grande, no a la matriz en sí ... –
Las matrices Stadard .Net ya son tipos de referencia. – Dykam