La gestió de memòria és un aspecte crucial en la programació de jocs, especialment quan es treballa amb un motor tan potent com Unreal Engine. En aquest mòdul, aprendrem com gestionar la memòria de manera eficient per assegurar que els nostres jocs funcionin de manera fluida i sense problemes.
Conceptes Clau
-
Memòria Dinàmica vs. Memòria Estàtica:
- Memòria Estàtica: Assignada en temps de compilació i alliberada automàticament quan el programa finalitza.
- Memòria Dinàmica: Assignada en temps d'execució i necessita ser alliberada manualment per evitar fuites de memòria.
-
Punter i Referències:
- Punter: Una variable que emmagatzema l'adreça de memòria d'una altra variable.
- Referència: Un àlies per a una variable existent, que no pot ser nul·la.
-
Gestió Automàtica de Memòria:
- Garbage Collection: Unreal Engine utilitza un sistema de recollida d'escombraries per gestionar la memòria automàticament en alguns casos, especialment amb Blueprints.
Exemples Pràctics
Exemple 1: Assignació i Alliberament de Memòria Dinàmica en C++
#include <iostream>
void assignarMemoria() {
// Assignació de memòria dinàmica per a un enter
int* ptr = new int;
*ptr = 10;
std::cout << "Valor assignat: " << *ptr << std::endl;
// Alliberament de memòria
delete ptr;
}
int main() {
assignarMemoria();
return 0;
}Explicació:
new intassigna memòria dinàmica per a un enter.delete ptrallibera la memòria assignada per evitar fuites de memòria.
Exemple 2: Ús de Smart Pointers
Unreal Engine recomana l'ús de smart pointers per gestionar la memòria de manera més segura i eficient.
#include <memory>
#include <iostream>
void usarSmartPointer() {
// Creació d'un smart pointer
std::unique_ptr<int> ptr = std::make_unique<int>(20);
std::cout << "Valor assignat: " << *ptr << std::endl;
}
int main() {
usarSmartPointer();
return 0;
}Explicació:
std::unique_ptrés un tipus de smart pointer que gestiona la memòria automàticament.std::make_unique<int>(20)assigna memòria i inicialitza el valor a 20.
Exercicis Pràctics
Exercici 1: Assignació Dinàmica de Memòria per a un Array
Objectiu: Crear un array dinàmicament i alliberar la memòria després d'usar-lo.
#include <iostream>
void assignarArray() {
// Assignació de memòria per a un array de 5 enters
int* array = new int[5];
// Assignació de valors
for (int i = 0; i < 5; ++i) {
array[i] = i * 2;
}
// Impressió de valors
for (int i = 0; i < 5; ++i) {
std::cout << "Valor a l'índex " << i << ": " << array[i] << std::endl;
}
// Alliberament de memòria
delete[] array;
}
int main() {
assignarArray();
return 0;
}Solució
#include <iostream>
void assignarArray() {
int* array = new int[5];
for (int i = 0; i < 5; ++i) {
array[i] = i * 2;
}
for (int i = 0; i < 5; ++i) {
std::cout << "Valor a l'índex " << i << ": " << array[i] << std::endl;
}
delete[] array;
}
int main() {
assignarArray();
return 0;
}Errors Comuns i Consells
-
Fuites de Memòria:
- No oblidis alliberar la memòria assignada dinàmicament amb
deleteodelete[]. - Utilitza smart pointers per evitar fuites de memòria automàticament.
- No oblidis alliberar la memòria assignada dinàmicament amb
-
Accés a Memòria No Vàlida:
- Assegura't que els punters no apunten a memòria alliberada.
- Inicialitza els punters a
nullptrdesprés d'alliberar la memòria.
Resum
En aquesta secció, hem après els conceptes bàsics de la gestió de memòria en C++ i com aplicar-los en el context d'Unreal Engine. Hem vist exemples pràctics d'assignació i alliberament de memòria, així com l'ús de smart pointers per gestionar la memòria de manera més segura. També hem practicat amb exercicis per reforçar aquests conceptes. En el proper tema, explorarem el multithreading i com utilitzar-lo per millorar el rendiment dels nostres jocs.
Curs d'Unreal Engine
Mòdul 1: Introducció a Unreal Engine
- Què és Unreal Engine?
- Instal·lant Unreal Engine
- Navegant per la Interfície
- Creant el teu Primer Projecte
Mòdul 2: Conceptes Bàsics
Mòdul 3: Blueprints Intermedis
- Variables i Tipus de Dades
- Funcions i Esdeveniments
- Comunicació entre Blueprints
- Creant Objectes Interactius
Mòdul 4: Blueprints Avançats
Mòdul 5: Programació en C++ a Unreal Engine
- Configurant el teu Entorn de Desenvolupament
- Sintaxi Bàsica de C++
- Creant Classes en C++
- Integrant C++ amb Blueprints
Mòdul 6: Programació Avançada en C++
Mòdul 7: Temes Avançats
- Física i Col·lisió
- Renderització i Postprocessament
- Generació de Contingut Procedural
- Desenvolupament de Realitat Virtual
