elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]  (Leído 6,253 veces)
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
« Respuesta #10 en: 5 Mayo 2016, 15:51 pm »

Supongo que las optimizaciones que se puedan a hacer al codigo en C podrian tener distintos resultados dependiendo de la plataforma y flags del compilador.

Sin duda, la plataforma es fundamental y el compilador tambien tiene lo suyo.

Lo que comentan sobre si mov usa 3 o 4 bytes podria dejarse para aplicaciones muy especializadas  donde cada ciclo del procesador cuente.

Para PC es poco relevante segun mi opinion, en sistema embebidos - donde hay que ahorrar bateria muchas veces - es otra cosa.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
« Respuesta #11 en: 5 Mayo 2016, 15:52 pm »

Hola.

Citar
Aun.que creo que la pregunta era mas orientada a alguien que apenas esta aprendiendo a user apuntadores.

Si bien esto es totalmente correcto, me parece interesante el debate porque a este post es probable que lo lean
gente que sepan mucho pero no tanto como vos, Eternal, MAFUS,  class_OpenGL, ivancea96, etc. -
Igual para mi todo esto es chino basico, algo seguramente voy a rescatar. -

Adelane y un abrazo.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
« Respuesta #12 en: 5 Mayo 2016, 16:07 pm »

Sí, cada compilador genera su propio código y en verdad no se puede asegurar que uno u otro optimice más.
Por ejemplo GCC con O2 no genera ni el array en el ejemplo del array en pila de Eternal Idol:
Código
  1. main:
  2. .LFB24:
  3. .cfi_startproc
  4. sub rsp, 8
  5. .cfi_def_cfa_offset 16
  6. mov edx, 2
  7. mov esi, OFFSET FLAT:.LC0
  8. mov edi, 1
  9. xor eax, eax
  10. call __printf_chk
  11. xor eax, eax
  12. add rsp, 8
  13. .cfi_def_cfa_offset 8
  14. ret
  15. .cfi_endproc



Todo depende de cada compilador y de la configuración que se le da. Continuar ahora sería entrar en una guerra de compiladores, jeje, y no es plan.
« Última modificación: 5 Mayo 2016, 16:41 pm por MAFUS » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
« Respuesta #13 en: 5 Mayo 2016, 17:37 pm »

Idem /O2 para VC++, aunque claro eso no sirve en lo absoluto para comparar el acceso a arrays:

Código
  1. main:
  2.  0000000000000000: 48 83 EC 28        sub         rsp,28h
  3.  0000000000000004: 48 8D 0D 00 00 00  00 lea         rcx,[??_C@_02IKAHHCAI@?$CFi?$AA@]
  4.  000000000000000B: BA 02 00 00 00     mov         edx,2
  5.  0000000000000010: E8 00 00 00 00     call        printf
  6.  0000000000000015: 33 C0              xor         eax,eax
  7.  0000000000000017: 48 83 C4 28        add         rsp,28h
  8.  000000000000001B: C3                 ret

Por cierto con un ligero cambio se podria forzar el uso del array haciendo que en tiempo de compilacion no se sepa el valor a imprimir:
Código
  1. array[x] =  rand() % 256 + 1;

Pero visto lo visto no tiene sentido el debate cuando se pasan de largo los argumentos.



En definitiva depende de la plataforma en primer lugar y como vimos en PC no es mas o menos eficiente usar un array en la pila o en el monticulo en cuanto a acceso al mismo (ambos son memoria virtual que el S.O. se encarga de mappear a RAM con ayuda del hardware y se usan las mismas instrucciones mov para acceder), otra cosa es la reserva/liberacion.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Que tipo de lista dinamica me conviene utilizar? « 1 2 »
.NET (C#, VB.NET, ASP)
Skeletron 18 10,399 Último mensaje 13 Febrero 2010, 06:09 am
por Skeletron
Memoria dinámica
Programación C/C++
eleon 6 5,077 Último mensaje 24 Enero 2012, 22:17 pm
por Eternal Idol
Memoria dinamica? « 1 2 »
Programación C/C++
vangodp 11 5,804 Último mensaje 30 Abril 2014, 12:35 pm
por vangodp
Memoría dinámica
Programación C/C++
Developer Diego 4 2,715 Último mensaje 20 Mayo 2014, 23:10 pm
por Developer Diego
Generar Imagen dinámica con GD para utilizar de placeholder (Solucionado)
PHP
AlbertoBSD 4 2,515 Último mensaje 28 Diciembre 2019, 21:50 pm
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines