{"id":4051,"date":"2025-01-20T04:46:03","date_gmt":"2025-01-20T04:46:03","guid":{"rendered":"https:\/\/www.goncalo.pt\/por\/?p=4051"},"modified":"2025-03-19T21:30:03","modified_gmt":"2025-03-19T21:30:03","slug":"2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo","status":"publish","type":"post","link":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/","title":{"rendered":"2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;,"},"content":{"rendered":"\n<p>Pois \u00e9, reduzi o uso da mem\u00f3ria do meu Game Engine em perto de 90%, e ainda consegui manter ou aumentar ligeiramente a velocidade do mesmo (mesmos FPS), sem contar que preparei o meu Game Engine tamb\u00e9m para uso em Multi-Threading, sendo que esta opera\u00e7\u00e3o levou semanas de trabalho \u00e1rduo que afectou centenas de ficheiros de c\u00f3digo.<\/p>\n\n\n\n<p>Como? Explico abaixo.<\/p>\n\n\n\n<p>Mas quanto ao baixar 90% de mem\u00f3ria e subir at\u00e9 a velocidade, \u00e9 espectacular pois por norma acabamos por gastar mais mem\u00f3ria se queremos ganhar velocidade, ou perder velocidade se queremos baixar o uso da mem\u00f3ria, e quando dei forma\u00e7\u00e3o cheguei a usar como exemplo um caso em que poderia usar um int em vez de bool, para aumentar a velocidade de um programa, mas aumentando o consumo de mem\u00f3ria, ou usar bool para reduzir o mesmo mas baixando a velocidade.<\/p>\n\n\n\n<p>Como fiz isto? Vou dar uma dica; espreitem as linhas de c\u00f3digo no meu CodeBlocks:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.mp4\"><\/video><figcaption class=\"wp-element-caption\">2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;<\/figcaption><\/figure>\n\n\n\n<p>Acima podem ver que eu n\u00e3o uso um std::unordered_map mas sim um &#8220;ThreadSafeUnorderedMap&#8221;, bem como substitu\u00ed um std::vector por um &#8220;ThreadSafeVector&#8221;, e at\u00e9 podem ver no exemplo acima um &#8220;ThreadSafeBidimensionalArray&#8221; ao inv\u00e9s de usar arrays normais do C++.<\/p>\n\n\n\n<p>O que fiz foi simples: Entre v\u00e1rias outras coisas (claro), eu substitu\u00ed containers de C++, por containers feitos por mim, mais leves, customizados ao meu gosto, Thread-Safe, mais r\u00e1pidos, etc, e esses containers come\u00e7ados por &#8220;ThreadSafe&#8221; que uso acima, n\u00e3o os encontrar\u00e3o no C++ pois fui eu que os criei de acordo com as necessidades do meu engine.<\/p>\n\n\n\n<p>Pois se queremos criar um Game Engine do zero, n\u00e3o podemos usar containers normais fornecidos pelo C++.<\/p>\n\n\n\n<p>Eu usava em grande parte porque o meu objectivo nos \u00faltimos anos n\u00e3o era optimizar ao m\u00e1ximo o Game Engine, mas sim o suficiente (da\u00ed em escrever muito &#8220;optimizado qb&#8221;), porque queria estar focado na divers\u00e3o de criar o engine, ver coisas a funcionar, trabalhar com Matem\u00e1tica e F\u00edsica, como balan\u00e7ar numa corda, etc.<\/p>\n\n\n\n<p>Mas mais cedo ou mais tarde eu tinha de come\u00e7ar a tratar desta parte do engine, mais low-level, de tirar mais proveito do hardware.<\/p>\n\n\n\n<p>Vejam como usava perto de 2 GB para funcionar h\u00e1 uns meses:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"228\" src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2024\/10\/2024-10-06-Multi-Threading-Manager-finished-on-my-Cpp-Game-Engine-Thread-TaskRunners-View.gif\" alt=\"2024-10-05 - Vista das TaskRunners no meu Sistema de Gest\u00e3o de Threads finalizado no meu Game Engine em C++...\" class=\"wp-image-3912\" style=\"width:1138px;height:auto\"\/><figcaption class=\"wp-element-caption\">2024-10-05 &#8211; Vista das TaskRunners no meu Sistema de Gest\u00e3o de Threads finalizado no meu Game Engine em C++&#8230;<\/figcaption><\/figure>\n\n\n\n<p>E vejam como usa 90% menos agora:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"332\" src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine-System-Monitor.gif\" alt=\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo...\" class=\"wp-image-4054\" style=\"width:1140px;height:auto\"\/><figcaption class=\"wp-element-caption\">2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;<\/figcaption><\/figure>\n\n\n\n<p>Ele arranca com apenas 120 MB, o que seria uma redu\u00e7\u00e3o de 95%, mas na realidade \u00e9 90% porque \u00e0 medida que vou usando recursos do jogo, ele sobe para os 200 MB.<\/p>\n\n\n\n<p>N\u00e3o criei apenas os meus pr\u00f3prios containers, mas tamb\u00e9m os meus pr\u00f3prios algoritmos, iteradores, fun\u00e7\u00f5es variadas, etc, para substituir os correspondentes da STL do C++.<\/p>\n\n\n\n<p>Por estranho que pare\u00e7a, at\u00e9 simplifiquei o c\u00f3digo em algumas coisas, vejamos um exemplo abaixo:<\/p>\n\n\n\n<p>Velho: this-&gt;gameObjects.erase(std::remove(this-&gt;gameObjects.begin(),this-&gt;gameObjects.end(),obj),this-&gt;gameObjects.end());<\/p>\n\n\n\n<p>Novo: this-&gt;gameObjects.erase(obj);<\/p>\n\n\n\n<p>Mais leg\u00edvel, certo?<\/p>\n\n\n\n<p>Claro que isto dito assim, parece um para\u00edso, parece fac\u00edlimo, parece tudo de bom.<\/p>\n\n\n\n<p>Mas deu muito trabalho, tive de alterar centenas de ficheiros, vezes e vezes em repetido, pois por cada container alterado, que me for\u00e7ou a alterar centenas de ficheiros, tive de voltar a alterar mais umas dezenas ou centenas com outro container, etc, e isto semanas a fio.<\/p>\n\n\n\n<p>No v\u00eddeo acima conseguem ver v\u00e1rios execut\u00e1veis de teste, para verem que por vezes aumentava a velocidade (chegando aos 550 FPS num execut\u00e1vel acima), depois tentava cortar o uso da mem\u00f3ria, at\u00e9 achar um ponto ideal em que consumia menos 90% de mem\u00f3ria mas mantendo ou at\u00e9 ganhando ligeiramente alguma velocidade.<\/p>\n\n\n\n<p>Este engine estaria pronto para rodar como est\u00e1 em m\u00e1quinas de 2010, e at\u00e9 em m\u00e1quinas de 2005 se reduzir um pouco os FPS talvez ao inv\u00e9s dos 60 FPS actuais, e talvez resolu\u00e7\u00e3o (pois uso 1280&#215;1024 agora).<\/p>\n\n\n\n<p>Em m\u00e1quinas de 2000 tamb\u00e9m poderia funcionar, mas a\u00ed for\u00e7ar-me-ia a adapta\u00e7\u00f5es mais radicais pois os CPUs eram muito mais fracos.<\/p>\n\n\n\n<p>Mas lembrem-se de que me estou a dar ao luxo de puxar muito pela m\u00e1quina, sen\u00e3o vejamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A m\u00e1quina \u00e9 um port\u00e1til HP dos de 500\/600\u20ac comprado em 2021, com um I5 que s\u00f3 tem 8 threads e talvez 4 ou 6 cores (fiz um upgrade de 8 GB para 24 GB porque d\u00e1 jeito na compila\u00e7\u00e3o dos resources do jogo);<\/li>\n\n\n\n<li>Estes resultados t\u00eam em conta que uso 1280&#215;1024 de resolu\u00e7\u00e3o desenhada no ecr\u00e3;<\/li>\n\n\n\n<li>Ainda por cima em RGBA de 16 milh\u00f5es de cores, ou seja, cada p\u00edxel s\u00e3o 4 bytes, ou seja, 5 MB por cada ecr\u00e3 desenhado, e com transpar\u00eancias de v\u00e1rias layers, etc;<\/li>\n\n\n\n<li>Um n\u00edvel de testes com 200 tiles de largura (32 p\u00edxeis por 32 p\u00edxeis cada), e 95 de altura, ou seja, 19.000 tiles, em que cada tile tem 32*32 p\u00edxeis, dando 19 MB s\u00f3 da parte gr\u00e1fica do background do n\u00edvel;<\/li>\n\n\n\n<li>O n\u00edvel de testes tem mais de 100 inimigos no ecr\u00e3;<\/li>\n\n\n\n<li>Al\u00e9m de umas 5000 gotas de chuva (objectos);<\/li>\n\n\n\n<li>E milhares de bolhas de ar na \u00e1gua, entre muitas outras coisas no ecr\u00e3;<\/li>\n\n\n\n<li>Tudo, inclusiv\u00e9 os inimigos, desenhados em real-time, mesmo fora do ecr\u00e3 vis\u00edvel (da\u00ed poderem ver no mapa do jogo os inimigos fora do ecr\u00e3 vis\u00edvel a mexerem-se);<\/li>\n\n\n\n<li>Uso v\u00e1rios MP3 e WAV embebidos no execut\u00e1vel que ocupam a sua mem\u00f3ria tamb\u00e9m;<\/li>\n\n\n\n<li>Fogo e outros mecanismos desenhados em real-time (n\u00e3o s\u00e3o sprites);<\/li>\n\n\n\n<li>Gotas de chuva desenhadas em real-time, bem como neve, etc (n\u00e3o s\u00e3o sprites);<\/li>\n\n\n\n<li>Armas laser desenhadas em real-time, em que cada p\u00edxel das mesmas que cruzem um p\u00edxel de um inimigo lhes tira tipo 0,20% da energia em real-time;<\/li>\n\n\n\n<li>Ou seja, colis\u00f5es mesmo a n\u00edvel de p\u00edxel em real-time;<\/li>\n\n\n\n<li>60 FPS (apesar de chegar aos 500 FPS usando apenas 16% do CPU dispon\u00edvel, podendo ir aos 3000 FPS neste CPU velho);<\/li>\n\n\n\n<li>Etc!<\/li>\n<\/ul>\n\n\n\n<p>Se eu reduzir apenas a resolu\u00e7\u00e3o de 1280&#215;1024 para 320&#215;200, s\u00f3 a\u00ed reduziria a mem\u00f3ria usada no desenho do ecr\u00e3 em 20 vezes, e poderia calcular s\u00f3 o que \u00e9 vis\u00edvel no ecr\u00e3, reduzir inimigos, reduzir gotas de chuva e neve e bolhas de \u00e1gua, meter sprites em vez de fogo gerado por algoritmos em real-time, etc!<\/p>\n\n\n\n<p>Por isso met\u00ea-lo a funcionar em m\u00e1quinas de 2005 seria f\u00e1cil com poucas configura\u00e7\u00f5es.<\/p>\n\n\n\n<p>Meter em m\u00e1quinas de 2000 j\u00e1 requeriria cortar algumas coisas, mas funcionaria.<\/p>\n\n\n\n<p>E se o quisesse adaptar para m\u00e1quinas de MS-DOS dos anos 90, teria de alterar muita coisa como as paletes, etc, mas seria poss\u00edvel, meter tudo isto a funcionar no MS-DOS em m\u00e1quinas antigas.<\/p>\n\n\n\n<p>Mas dispenso, pois o meu objectivo \u00e9 usar o Game Engine para criar os meus jogos em m\u00e1quinas actuais, com o poder todo que me permitem usar.<\/p>\n\n\n\n<p>E eu poderia reduzir um pouco mais, mas n\u00e3o compensaria o esfor\u00e7o pois os 120 MB a 200 MB devem-se ao n\u00edvel enorme de testes que tenho no meu platformer com 1001 coisas geradas em tempo real.<\/p>\n\n\n\n<p>Mas penso que o meu engine j\u00e1 est\u00e1 mais do que optimizado, e no exemplo abaixo podemos ver o meu remake do Master of Orion a ocupar s\u00f3 uns 66 MB, e isso deve-se aos MP3, \u00e0s texturas, ao pr\u00f3prio engine, e 1001 coisas que est\u00e3o activas para o Platformer e que nem lhe fariam falta (posso reduzir):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"707\" height=\"324\" src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-My-Game-Engine-ocuppying-66MB-of-memory-on-my-Master-Of-Orion-Remake.png\" alt=\"2025-01-20 - O meu n\u00edvel de testes de Master of Orion a ocupar 66 MB por ter poucos recursos usados...\" class=\"wp-image-4055\" style=\"width:1139px;height:auto\" srcset=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-My-Game-Engine-ocuppying-66MB-of-memory-on-my-Master-Of-Orion-Remake.png 707w, https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-My-Game-Engine-ocuppying-66MB-of-memory-on-my-Master-Of-Orion-Remake-300x137.png 300w\" sizes=\"(max-width: 707px) 100vw, 707px\" \/><figcaption class=\"wp-element-caption\">2025-01-20 &#8211; O meu n\u00edvel de testes de Master of Orion a ocupar 66 MB por ter poucos recursos usados&#8230;<\/figcaption><\/figure>\n\n\n\n<p>O outro acima chega aos 200 MB porque j\u00e1 tem muitos inimigos, um n\u00edvel gigante, muitos algoritmos a gerar F\u00ecsica em tempo real, etc.<\/p>\n\n\n\n<p>Por isso reduzir mais de momento n\u00e3o vale a pena, seria trabalho a mais para pouco ganho, e para m\u00e1quinas actuais com 16 ou 32 GB de mem\u00f3ria, ocupar 0,2 GB \u00e9 mais do que suficiente para jogos complexos. \ud83d\ude42<\/p>\n\n\n\n<p>Meti abaixo o post seguinte, que fala do tamanho do execut\u00e1vel que \u00e9 centenas de vezes inferior ao de outros Game Engines, uma das raz\u00f5es pelas quais o desenvolvo.<\/p>\n\n\n\n<p>Bem, agora vou andar ocupado com a mudan\u00e7a para o Porto (estou em fase de mudan\u00e7as o que me atrasou tamb\u00e9m esta opera\u00e7\u00e3o de engenharia de software mais complexa), mas um dia quando voltar a programar, vai ser para as partes divertidas, pois em termos de mem\u00f3ria e CPU o meu Game Engine j\u00e1 est\u00e1 bastante optimizado. \ud83d\ude42<\/p>\n\n\n\n<p>Pelo menos j\u00e1 me sinto melhor ao n\u00e3o ver o meu Game Engine ser mostrado como algo que ocupa 2 GB de mem\u00f3ria por estar a usar ferramentas STL do C++, ao inv\u00e9s de criar as minhas pr\u00f3prias, agora j\u00e1 me sinto melhor ao exibi-lo!<\/p>\n\n\n\n<p>Mais not\u00edcias um dia.<\/p>\n\n\n\n<p>Hasta!<\/p>\n\n\n\n<p>2025-01-20.<\/p>\n\n\n\n<p>Partilhado no mesmo dia no meu LinkedIn, em:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.linkedin.com\/posts\/goncalopt_redu%C3%A7%C3%A3o-de-90-no-uso-de-mem%C3%B3ria-no-meu-game-activity-7287091552353488896-FFij?utm_source=share&amp;utm_medium=member_desktop\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.linkedin.com\/posts\/goncalopt_redu%C3%A7%C3%A3o-de-90-no-uso-de-mem%C3%B3ria-no-meu-game-activity-7287091552353488896-FFij?utm_source=share&amp;utm_medium=member_desktop<\/a><\/p>\n\n\n\n<p>Pr\u00f3ximo post sobre o meu Game Engine, sobre o tamanho do execut\u00e1vel do mesmo:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-gon-alo-ferreira wp-block-embed-gon-alo-ferreira\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"hArkXujF2v\"><a href=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/29\/2025-01-29-o-tamanho-do-executavel-do-meu-game-engine-em-c\/\">2025-01-29 &#8211; O tamanho do execut\u00e1vel do meu Game Engine em C++&#8230;<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;2025-01-29 &#8211; O tamanho do execut\u00e1vel do meu Game Engine em C++&#8230;&#8221; &#8212; Gon\u00e7alo Ferreira\" src=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/29\/2025-01-29-o-tamanho-do-executavel-do-meu-game-engine-em-c\/embed\/#?secret=5sdE80efVn#?secret=hArkXujF2v\" data-secret=\"hArkXujF2v\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">2025-01-29 \u2013 O tamanho do execut\u00e1vel do meu Game Engine em C++\u2026<\/figcaption><\/figure>\n\n\n\n<p>Post anterior, tamb\u00e9m sobre o meu Game Engine (o Pai-Natal que atirava bombas, a preparar para o Batman the Movie remake):<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-gon-alo-ferreira wp-block-embed-gon-alo-ferreira\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"Id4fmDGQwd\"><a href=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/09\/2025-01-09-testes-de-balistica-com-granadas-e-um-pai-natal-no-meu-game-engine-em-c\/\">2025-01-09 &#8211; Testes de Bal\u00edstica com Granadas e um Pai Natal, no meu Game Engine em C++\u2026<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;2025-01-09 &#8211; Testes de Bal\u00edstica com Granadas e um Pai Natal, no meu Game Engine em C++\u2026&#8221; &#8212; Gon\u00e7alo Ferreira\" src=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/09\/2025-01-09-testes-de-balistica-com-granadas-e-um-pai-natal-no-meu-game-engine-em-c\/embed\/#?secret=Zk0SQHtFke#?secret=Id4fmDGQwd\" data-secret=\"Id4fmDGQwd\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">2025-01-09 \u2013 Testes de Bal\u00edstica com Granadas e um Pai Natal, no meu Game Engine em C++\u2026<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"332\" src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine-System-Monitor.gif\" alt=\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo...\" class=\"wp-image-4054\" style=\"width:1139px;height:auto\"\/><figcaption class=\"wp-element-caption\">2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"338\" src=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\" alt=\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo...\" class=\"wp-image-4064\" style=\"width:1137px;height:auto\"\/><figcaption class=\"wp-element-caption\">2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Pois \u00e9, reduzi o uso da mem\u00f3ria do meu Game Engine em perto de 90%, e ainda consegui manter ou<\/p>\n","protected":false},"author":1,"featured_media":4064,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,286,287,290,284,5,3,285,289,164,346,162,291,288,292,133],"tags":[7,394,118,207,24,23,235,117,27,314,281,120,126,26,25],"class_list":["post-4051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-game-development","category-estrategia","category-isometricos","category-labirintos","category-platformers","category-programacao","category-projectos","category-shoot-em-up","category-horizontal-shooter","category-top","category-top-10-game-engine","category-top-game-engine","category-um-dia-3d","category-v-scrolling","category-varios-simuladores","category-video-jogos","tag-c","tag-cpu","tag-desenvolvimento-de-jogos","tag-dev","tag-game-dev","tag-game-engine","tag-low-level","tag-motor-de-jogos","tag-optimizacao","tag-performance","tag-platformer","tag-programacao","tag-shooter","tag-videogames","tag-videojogos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira\" \/>\n<meta property=\"og:description\" content=\"Pois \u00e9, reduzi o uso da mem\u00f3ria do meu Game Engine em perto de 90%, e ainda consegui manter ou\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\" \/>\n<meta property=\"og:site_name\" content=\"Gon\u00e7alo Ferreira\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-20T04:46:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-19T21:30:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"338\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"gnmf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"gnmf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\"},\"author\":{\"name\":\"gnmf\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/28a9f845c4de91a7c067707279b1d8dd\"},\"headline\":\"2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;,\",\"datePublished\":\"2025-01-20T04:46:03+00:00\",\"dateModified\":\"2025-03-19T21:30:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\"},\"wordCount\":1760,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\",\"keywords\":[\"C++\",\"CPU\",\"Desenvolvimento de Jogos\",\"Dev\",\"Game Dev\",\"Game Engine\",\"Low-Level\",\"Motor de Jogos\",\"optimiza\u00e7\u00e3o\",\"Performance\",\"Platformer\",\"Programa\u00e7\u00e3o\",\"Shooter\",\"VideoGames\",\"VideoJogos\"],\"articleSection\":[\"Desenvolvimento de Jogos\",\"Estrat\u00e9gia\",\"Isom\u00e9tricos\",\"Labirintos\",\"Platformers\",\"Programa\u00e7\u00e3o\",\"Projectos\",\"Shoot 'Em Up\",\"Shooter Horizontal\",\"Top\",\"Top 10 Game Engine\",\"Top Game Engine\",\"Um Dia - 3D\",\"V-Scrolling\",\"V\u00e1rios Simuladores\",\"Video Jogos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\",\"url\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\",\"name\":\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira\",\"isPartOf\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\",\"datePublished\":\"2025-01-20T04:46:03+00:00\",\"dateModified\":\"2025-03-19T21:30:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage\",\"url\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\",\"contentUrl\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif\",\"width\":600,\"height\":338,\"caption\":\"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo...\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.goncalo.pt\/por\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;,\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#website\",\"url\":\"https:\/\/www.goncalo.pt\/por\/\",\"name\":\"Gon\u00e7alo Ferreira\",\"description\":\"[Game Engine\/Software\/Simulation\/Trading Systems\/Full Stack] Developer, Musician, Composer, Painter, Writer, IT Trainer, Sys Admin, Ex-Trader, Skater, Strongman, Vegan, Self-Taught Neuro-Divergent Polymath, and 1001 things more. Welcome to my world!\",\"publisher\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.goncalo.pt\/por\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#organization\",\"name\":\"Gon\u00e7alo Ferreira\",\"url\":\"https:\/\/www.goncalo.pt\/por\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2023\/08\/cropped-Goncalo-Ferreira-Logo-With-Face.png\",\"contentUrl\":\"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2023\/08\/cropped-Goncalo-Ferreira-Logo-With-Face.png\",\"width\":389,\"height\":90,\"caption\":\"Gon\u00e7alo Ferreira\"},\"image\":{\"@id\":\"https:\/\/www.goncalo.pt\/por\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"http:\/\/www.linkedin.com\/in\/GoncaloPT\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/28a9f845c4de91a7c067707279b1d8dd\",\"name\":\"gnmf\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/78a295ef7300b60da1d67d4ce84359da?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/78a295ef7300b60da1d67d4ce84359da?s=96&d=mm&r=g\",\"caption\":\"gnmf\"},\"sameAs\":[\"http:\/\/www.goncalo.pt\/por\"],\"url\":\"https:\/\/www.goncalo.pt\/por\/author\/gnmf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/","og_locale":"en_US","og_type":"article","og_title":"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira","og_description":"Pois \u00e9, reduzi o uso da mem\u00f3ria do meu Game Engine em perto de 90%, e ainda consegui manter ou","og_url":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/","og_site_name":"Gon\u00e7alo Ferreira","article_published_time":"2025-01-20T04:46:03+00:00","article_modified_time":"2025-03-19T21:30:03+00:00","og_image":[{"url":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif","width":600,"height":338,"type":"image\/gif"}],"author":"gnmf","twitter_card":"summary_large_image","twitter_misc":{"Written by":"gnmf","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#article","isPartOf":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/"},"author":{"name":"gnmf","@id":"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/28a9f845c4de91a7c067707279b1d8dd"},"headline":"2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;,","datePublished":"2025-01-20T04:46:03+00:00","dateModified":"2025-03-19T21:30:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/"},"wordCount":1760,"commentCount":0,"publisher":{"@id":"https:\/\/www.goncalo.pt\/por\/#organization"},"image":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif","keywords":["C++","CPU","Desenvolvimento de Jogos","Dev","Game Dev","Game Engine","Low-Level","Motor de Jogos","optimiza\u00e7\u00e3o","Performance","Platformer","Programa\u00e7\u00e3o","Shooter","VideoGames","VideoJogos"],"articleSection":["Desenvolvimento de Jogos","Estrat\u00e9gia","Isom\u00e9tricos","Labirintos","Platformers","Programa\u00e7\u00e3o","Projectos","Shoot 'Em Up","Shooter Horizontal","Top","Top 10 Game Engine","Top Game Engine","Um Dia - 3D","V-Scrolling","V\u00e1rios Simuladores","Video Jogos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/","url":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/","name":"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..., - Gon\u00e7alo Ferreira","isPartOf":{"@id":"https:\/\/www.goncalo.pt\/por\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage"},"image":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif","datePublished":"2025-01-20T04:46:03+00:00","dateModified":"2025-03-19T21:30:03+00:00","breadcrumb":{"@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#primaryimage","url":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif","contentUrl":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2025\/01\/2025-01-20-Optimizing-memory-usage-and-speed-on-my-Cpp-Game-Engine.gif","width":600,"height":338,"caption":"2025-01-20 - Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo..."},{"@type":"BreadcrumbList","@id":"https:\/\/www.goncalo.pt\/por\/2025\/01\/20\/2025-01-20-optimizacao-do-uso-de-memoria-90-do-meu-game-engine-em-c-criacao-dos-meus-proprios-containers-e-adaptando-o-para-multi-threading-em-simultaneo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.goncalo.pt\/por\/"},{"@type":"ListItem","position":2,"name":"2025-01-20 &#8211; Optimiza\u00e7\u00e3o do uso de mem\u00f3ria (-90%) do meu Game Engine em C++ (Cria\u00e7\u00e3o dos meus pr\u00f3prios containers), e adaptando-o para Multi-Threading em simult\u00e2neo&#8230;,"}]},{"@type":"WebSite","@id":"https:\/\/www.goncalo.pt\/por\/#website","url":"https:\/\/www.goncalo.pt\/por\/","name":"Gon\u00e7alo Ferreira","description":"[Game Engine\/Software\/Simulation\/Trading Systems\/Full Stack] Developer, Musician, Composer, Painter, Writer, IT Trainer, Sys Admin, Ex-Trader, Skater, Strongman, Vegan, Self-Taught Neuro-Divergent Polymath, and 1001 things more. Welcome to my world!","publisher":{"@id":"https:\/\/www.goncalo.pt\/por\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.goncalo.pt\/por\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.goncalo.pt\/por\/#organization","name":"Gon\u00e7alo Ferreira","url":"https:\/\/www.goncalo.pt\/por\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.goncalo.pt\/por\/#\/schema\/logo\/image\/","url":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2023\/08\/cropped-Goncalo-Ferreira-Logo-With-Face.png","contentUrl":"https:\/\/www.goncalo.pt\/por\/wp-content\/uploads\/2023\/08\/cropped-Goncalo-Ferreira-Logo-With-Face.png","width":389,"height":90,"caption":"Gon\u00e7alo Ferreira"},"image":{"@id":"https:\/\/www.goncalo.pt\/por\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.linkedin.com\/in\/GoncaloPT\/"]},{"@type":"Person","@id":"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/28a9f845c4de91a7c067707279b1d8dd","name":"gnmf","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.goncalo.pt\/por\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/78a295ef7300b60da1d67d4ce84359da?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/78a295ef7300b60da1d67d4ce84359da?s=96&d=mm&r=g","caption":"gnmf"},"sameAs":["http:\/\/www.goncalo.pt\/por"],"url":"https:\/\/www.goncalo.pt\/por\/author\/gnmf\/"}]}},"_links":{"self":[{"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/posts\/4051"}],"collection":[{"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/comments?post=4051"}],"version-history":[{"count":7,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/posts\/4051\/revisions"}],"predecessor-version":[{"id":4096,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/posts\/4051\/revisions\/4096"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/media\/4064"}],"wp:attachment":[{"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/media?parent=4051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/categories?post=4051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.goncalo.pt\/por\/wp-json\/wp\/v2\/tags?post=4051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}