Ver Mensaje Individual
  #18 (permalink)  
Antiguo 09/02/2015, 17:26
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 5 meses
Puntos: 28
Respuesta: [Consulta]Tile Map.¿Mejor std::vector o array?

Cita:
Iniciado por razpeitia Ver Mensaje
También, puedes no reutilizar todo ese codigo, que te aseguro que mucho no lo utilizara porque es simple mapa en un juego. Incluso le podría dar opción de usar solo C.
Me refería al código del contenedor STL, que no hace falta escribirlo.

Cita:
Iniciado por razpeitia Ver Mensaje
Ya use la clase queue que hay en std, pero luego te das cuenta que no es threadsafe y terminas implementado la tuya usando un mutex :\ o usando algún queue que sea threadsafe de alguna otra librería.
No es excusa para no reutilizar código:
Código C++:
Ver original
  1. template<class T>
  2. class queue
  3. {
  4.    std::queue<T> cola;
  5.    std::mutex cerrojo;
  6.  
  7.    public:
  8.  
  9.      void push(const T &elemento)
  10.      {
  11.            cerrojo.lock();
  12.            cola.push();
  13.            cerrojo.unlock();
  14.      }
  15.      
  16.      //!empty()
  17.      T pop()
  18.      {
  19.            cerrojo.lock();
  20.            a = cola.pop();
  21.            cerrojo.unlock();
  22.            return a;
  23.      }
  24.  
  25.      T size() const
  26.      {
  27.            return cola.size();
  28.      }
  29.  
  30.      bool empty() const
  31.      {
  32.            return cola.empty();
  33.      }
  34. }

Un ejemplo de implementación que se podría hacer. Reutilizando código como te dije (primera máxima de la ingeniería del software).

PD: La implementación no es perfecta, es solo un ejemplo de código hecho sobre la marcha.
Cita:
Iniciado por razpeitia Ver Mensaje
Muchas optimizaciones hoy en día en juegos se hacen en ensamblador. Hacer todo en una abstracción mas alta te lleva al dilema de cuando es mas conveniente uno y otro.
Quizás en algún caso muy puntual, pero dudo que se haga de forma habitual.

Hoy en día se programa en más alto nivel que nunca, no es raro ver un juego hecho enteramente en Java (android) o con un motor gráfico (Unity con scripts en C#).

Además la diferencia entre ASM y C ya no es notable. Los compiladores han mejorado muchísimo en optimización los últimos 20 años, un buen programador de ASM todavía le saque algo (10-20%?). No vale la pena liarse para tener una mejora constante, al final lo que importa es tener un buen algoritmo más que un lenguaje cercano a la maquina. Eso si que se nota.

Cita:
Iniciado por razpeitia Ver Mensaje
100,000 elementos es muy arbitrario. 100,000 bytes (100Kb) no es lo mismo que 100,000 uint64 (800Kb) o tal vez una estructura mas grande.

Lo cual es muy poca ram considerando que una computadora de escritorio actual 1GB de ram es un chiste.
El stack por defecto suele rondar 1 mb. De ahí mi aproximación.

No entiendo como prefieres tocar las opciones del compilador (no portable) que usar memoria dinámica (solución portable). Le has cogido manía a la memoria dinámica y no sé porque.

Cita:
Iniciado por razpeitia Ver Mensaje
Incluso si no quieres que ocupe espacio en el stack, lo puedes poner como static. Después de todo lo vas estar pasando entre varias funciones.
Las variables static son peligrosas salvo que estas tengan un valor constante. Pues si no las mantienes controladas puede producir efectos laterales (funciones que con la misma entrada te genera un resultado diferente).

Última edición por amchacon; 09/02/2015 a las 17:32