Dev - C++ - Limite de memoria para compilar superado

 
Vista:
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 09/08/2020 16:38:28
Holas gente,

Hay alguna manera de aumentar el limite de memoria para compilar en Visual Studio Community?

Me sale este error: "fatal error C1002: el compilador no tiene espacio en el montón en el paso 2"

Me gustaría disponer del máximo espacio disponible, si es posible.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Limite de memoria para compilar superado

Publicado por Nacho (181 intervenciones) el 09/08/2020 18:02:22
Eso es un error del compilador. Actualiza.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 10/08/2020 03:13:59
Gracias por responder Nacho,

No creo que sea ese el problema, lo actualizo siempre.

https://gyazo.com/72762b94ce594fe3edadea3e4c8374e1

El problema es que estoy escribiendo un programa bastante grande y lo tengo ya al límite, cuando borro algún fragmento sí me deja compilar.

La verdad me gustaría poder hacerlo bastante más grande y la única solución que da microsoft es dividirlo, no me parece la mejor solución.

Ya no sé si es una limitación del hardware o del VisualStudio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limite de memoria para compilar superado

Publicado por Nacho (181 intervenciones) el 10/08/2020 12:30:49
Yo tampoco creo que ese sea el problema, sé que ese es el problema. Dicen que hace muchos años Bill Gates dijo que nunca iban a ser necesarios más de 640 k de memoria ram en un ordenador. Existe la memoria virtual. Lo que ganas con más ram es velocidad de proceso, al no tener que estar traspasando datos entre la memoria ram y el disco, y menos posibilidad de errores. Salvo caos muy raros que ahora no se me ocurren no haces que unas cosas sean procesables y otras no, y menos teniendo en cuenta la linealidad del procesamiento en un ordenador.

Así que si saca ese error es que microsoft ha cometido otro error que cualquier día subsana. Mentras tanto, ¿has probado a aumentar la memoria virtual?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 11/08/2020 06:20:49
Te dejo una captura de pantalla de lo que he hecho para aumentar la memoria virtual, cero que esta bien hecho,
aun así el problema lo sigo teniendo, no me compila.

https://gyazo.com/98f78fa8c72bf365cd40d6720db7c0a7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Rodrigo (539 intervenciones) el 10/08/2020 15:50:57
Que es lo que hace a tu programa grande?
por que no quieres o puedes dividirlo?
que te esta obligando a tener todo en un solo gran programa?

Sin saber la respuesta, en general, le haces un favor al compilador y tambien a quien lee tu programa el usar estructuras de datos y otras construcciones que permitan leer/entender de mejor manera tu programa. Ademas, reduces el tiempo que demora en compilar.
Parece haber mas ventajas por este camino. Por que seguir el otro?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 11/08/2020 06:21:13
Gracias por responder Rodrigo,

En mi programa en el paréntesis de un if he metido 2.000 posibilidades(calculado a ojo, son unas pocas más),
con 2 de estos ya no me compila y querría meter otros 20 fragmentos de código similares a este.

No me niego a dividirlo, pero la verdad no sé como llamar a un programa desde otro original, me faltan conocimientos para eso.

Tampoco sé como llamar a un "if" desde otro programa sin que afecte a la funcionalidad del programa original,
ya que el original tiene ya su estructura de "if, else if, else if... else" supongo que se podría añadir
un else if anulando el if que quiero añadir. Es decir, que si se cumple el "if añadido" que no haga nada en el original
para que se ejecute ese "if añadido", porque si no cumple las condiciones del original saltaría el else.

Estoy abierto a cualquier cosa que me solucione el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Rodrigo (539 intervenciones) el 11/08/2020 15:03:24
No entendi que problema estas tratando de resolver con tantos ifs().
Podrias indicar que problema intentas resolver y como lo estas haciendo?
Posiblemente estas sobrecomplicando la solucion.

Tal vez incluir un poco del codigo (algun par de casos para obtener la idea)?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 12/08/2020 11:31:46
La verdad no pensaba comentar de que trata mi programa por si se veía como algo poco ético, pero también hay
gente que hackea juegos, simplemente por el placer de aprender a hacerlo y no por ello son malas personas (yo me incluyo).

Es un programa que captando pixeles de la pantalla automatiza el juego de poker de la pagina Replaypoker.com aunque
podría usarse en otras cambiando pixeles.

Pensé en hacerlo porque me gusta el juego en concreto, pero es un juego en el que hay que tener mucha paciencia
esperando a que salgan buenas cartas, y una maquina no pierde la paciencia ni se tiltea, por lo que debería jugar mejor
que un humano. En un futuro se le podría incluso meter IA, que ya hay gente que lo ha hecho.

El problema de tamaño surge en el turn(cuarta carta) y river(quinta y última carta), ya que el número de posibilidades aumenta.
Normalmente tenemos 2 cartas en mano, se ponen en mesa otras 3(flop) después otra (turn) y después otra más (river)

Imaginemos que tenemos en la mano dos 10s (pareja de 10s) llegamos al turn y nos sale otro 10, por lo que tendríamos trío,
pero sólo apostaríamos si no hay proyecto de color ni de escalera.
https://www.888poker.es/blog/sites/newblog.888poker.es/files/inline-images/ranking-manos-en-poker_0.jpg

Contemplé dos maneras de hacerlo:
Una corta que sería quitando los casos desfavorables, con la que me liaba un poco y aun no sabía de la limitación de tamaño,
así que opté por la segunda.
La segunda y bastante más larga es apostar si se cumplen los casos favorables que necesitamos para tener esperanza de ganar positiva.

Ejemplo de pareja de 10s y 10 en el turn (método largo):
Apostaremos si las cartas de flop son: 26A, 26K, 26Q, 26J, 25k, 25Q, 25J, 259, 258, 257, 24K, 24Q, 24J, 249, 248, 247,
23K, 23Q, 23J, 239, 238, 237, 36A, 36K, 36Q, 36J, 35K, 35Q, 35J, 359, 358, 34K, 34Q, 34J, 349, 348, 46A, 46K, 46Q,
46J, 45K, 45Q, 45J, 459, 56A, 56K, 56Q, 56J y no hay posibilidad de color.
Se pierde más tiempo progamando el 26A que todo lo demás, porque después es copiar y pegar, eso si ocupa mucho.

Captura del supuesto:
https://gyazo.com/ea49fa4141fc0a11bca3d273d6dfe837

Captura del inicio del supuesto, incluye dejar fuera proyectos de color
https://gyazo.com/4d3955456785a4525a49a2f1a282ec86

mi=mano izquierda
md=mano derecha
at=diez azul, diez de diamantes (a)zul (t)en
nt=diez negro, picas
rt=diez rojo, corazones
vt=diez verde, tréboles
tn=turn
f1=primera carta del flop (af1 sólo para As)
f2=segunda carta del flop (af2 sólo para As)
f3=tercera carta del flop (af2 sólo para As)
a2=dos azul
n6=seis negro
na=As negro

Continuación con 26K
https://gyazo.com/171444d1f95f9614bfeefd212a21927b

Seguiríamos con el resto de posibilidades hasta la captura del final que incluye que tengamos full en lugar de trío, es decir
además del trio de 10s dos 2s, pero no tres 2s porque podrían ganarnos con poker de 2s.
https://gyazo.com/30c97142a9563fea3c297610b6211d98

Si en el turn no tenemos proyectos favorables de nada (poker, full, color, escalera, trio) no apostamos: else fold-pass

Me interesa sobretodo como incluir un fragmentos de código como este en el original, a poder ser sin que modifique
el tiempo de respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 91
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Kabuto (21 intervenciones) el 12/08/2020 13:03:44
Mmmmh... a ver, no entiendo del todo la lógica necesaria para lograr lo que quieres..

Sin embargo, si nos fijamos por ejemplo en esta porción:

cartas


Creo entender que ahí quieres comprobar si ambas cartas tienen valor 10, independientemente del color, y compruebas todas las combinaciones posibles, que implica muchos condicionales.

¿No te sería posible usar clases para optimizar estas comparaciones?

Por ejemplo, una clase reducida a lo más sencillo

1
2
3
4
5
6
7
class Carta
{
	public:
	int valor;
	char color;
 
};

Así, si queremos saber si nuestras dos cartas, mi y md, que ahora son objetos de clase Carta, tienen valor 10 independientemente de sus colores, bastaría con esto:

1
2
3
4
5
if (mi.valor == 10 && md.valor == 10) {
....
....
....
}


La diferencia es muy notable respecto a la porción de código anterior.

El resto de comparaciones que tengas que hacer, también se verán muy reducidas, tanto si necesitas saber el valor como el color.

Incluso puede que añadiendo métodos a la clase Carta, se faciliten otro tipo de consultas que puedas necesitar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Rodrigo (539 intervenciones) el 12/08/2020 16:06:10
Apoyo esta proposicion.

Cuando hayas cambiado como modelas las cartas, tambien podrias optimizar las comparaciones que haces para descubrir otros escenarios que quieres considerar.

Por ejemplo, para saber si en 3 cartas, 2 son iguales y la otra no, no necesitas comparar usando todas las combinaciones posibles, podria hacerse con mucho menos comparaciones:
1
2
3
(carta1.valor == carta2.valor && carta1.valor != carta3.valor) || // primeras 2 iguales
(carta1.valor == carta3.valor && carta1.valor != carta2.valor) || // primera y 3ra iguales
(carta2.valor == carta3.valor && carta1.valor != carta2.valor).   // 2da y 3ra iguales 

y con esto, reducirias de 117 (=13*3*3) comparaciones a estas 6.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 14/08/2020 07:07:42
Gracias a los dos, lo voy a probar, os diré que tal ha ido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 15/08/2020 12:59:42
Que tal chicos,

He estado intentando hacer esto de las clases pero es algo nuevo para mi, he estado probando varias cosas pero no consigo
que funcione y tampoco se como seguir, os pongo una captura de lo único que 'creo' que esta bien.
https://gyazo.com/c08fb3387592996331add914b087ce78

He pensado en poneros el ejemplo más pequeño posible de lo que hace mi programa actual y que uno de vosotros o los dos,
como queráis, si podéis, me pusierais como hacerlo con clases, puesto que no consigo hacer ni eso y necesito aunque sea
una base sobre la que ir construyendo.

El programa necesita una coordenada 'X' y una 'Y' para saber donde está la carta en la pantalla y un 'int' color de pixel
único para saber qué carta es. A cada carta de la baraja le corresponde un color de pixel único.
Resumen del ejemplo: si nos sale pareja de Ks en mano vamos allin.
https://gyazo.com/bfd2571c99f294a8dbc018cbb2b9f92f
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Limite de memoria para compilar superado

Publicado por Nacho (181 intervenciones) el 15/08/2020 13:17:53
Mismamente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
switch (mi)
{
    case ak:  switch(md)
                   {
                          case nk:
                          case ak:
                          case rk:
                          case vk:
                                Allin()
                                break;
                   }
 
     case nk: switch(md)
                   {
 
                   }
     case rk:
 
     case vk:
}



Y con if no tienes que estar continuamente comprobando mi.
if (mi==ak) if (md==...) || (md==...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 11/08/2020 06:21:39
Gracias por responder Kabuto,

Te dejo dos capturas de lo que he hecho, seguramente haya algún fallo de sintaxis, la cosa es que el problema persiste.

La verdad pensaba que era la solución porque en el error me nombra los bytes de la pila y el espacio del montón.

https://gyazo.com/296cdaac3e342e141e1c4968c58f23d5

https://gyazo.com/4e8a865ca1d810f5351c377ea06ab5c2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 91
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Kabuto (21 intervenciones) el 11/08/2020 19:07:18
Lo que no se decirte es cuanto HEAP puede convenir aumentar o si puede conllevar algún efecto colateral indeseado. Estoy lejos de ser un experto en el tema.

Pero coincido con Rodrigo en que tal vez la solución pase por dividir el código.
Quizás si explicas en que consiste tu programa, por qué hay que contemplar 10000 posibilidades, cuál es la naturaleza de los datos procesados, etc... se pueda buscar un enfoque distinto.

Desde luego, tener 2000 posibilidades en UN ÚNICO paréntesis, seguro que vuelve tarumba a cualquier compilador.
Y "casi" seguro, que habrá otra forma de enfocar el problema de un modo más ágil y eficiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Limite de memoria para compilar superado

Publicado por Nacho (181 intervenciones) el 11/08/2020 20:14:21
Eso varía el tamaño del heap o de la pila del exe generado, no del programa que genera el exe. No sé si has probado ya a aumentar la memoria virtual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 11/08/2020 06:21:53
Gracias por responder Tom,

Ya había consultado la página, pero la única solución que da microsoft es dividirlo y no me parecía suficiente.
¿Cómo divides una sentencia if con 10.000 posibilidades? porque podría hacerse, hay que estar muy loco xD pero
¿cómo divides eso?, en el caso de que se pueda yo no sé hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Fernando
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Limite de memoria para compilar superado

Publicado por Fernando (15 intervenciones) el 11/08/2020 06:22:21
Os dejo a todos el mesaje de error:

https://gyazo.com/1d8bfa811f5391fd172bcfdba8059bd2

Tabién he probado a añadir "/analyze:stacksize32768" que te sale como posible solución en el el error C6262.

https://gyazo.com/a5956c143486a5c70f5132be90fc600f
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar