La regla de oro es que está bien pasar estructuras pequeñas por valor y las más grandes deben hacerse por punteros.¿Cómo se pueden pasar las estructuras grandes por valor de manera eficiente?
Mi pregunta es dónde exactamente está este punto de corte? ¿Qué tan grandes pueden ser las estructuras antes de que sea mejor pasarlas por puntero?
Sé que esto variará según las plataformas, pero supongo que se podrían dar algunas estimaciones aproximadas. Hace un año o dos intenté descubrir esto en la arquitectura de PPC y me sorprendió que uno pudiera pasar una gran cantidad de datos de manera eficiente por valor. Piense en 10 valores dobles más o menos estuvo bien debido a la gran cantidad de registros en PPC. Por puntero realmente involucraba más copia dentro y fuera de la memoria.
Sin embargo, ahora estoy en Intel y espero que las cosas puedan ser diferentes. Dado que la CPU no tiene tantos registros tradicionalmente, pero tal vez eso es diferente en los registros de 64 bits o coma flotante?
Depende .... Necesita hacer referencia ... –
Mitch es correcto, la única forma de saberlo es con un punto de referencia. Y tu respuesta variará según la plataforma en la que pruebes. –
Supongo que mi problema es que no sé cómo marcarlo adecuadamente. Me temo que un ejemplo simple será optimizado demasiado fácilmente por el compilador, y no reflejará el uso real. Puede parecer estúpido hacer una optimización prematura, pero esto es algo con lo que he luchado para tener un buen rendimiento, así que no quiero tomar una decisión estúpida innecesaria. Afectará mi diseño completo de API, por lo que no quiero tener que cambiar todo esto más adelante. –