Junior
Como são utilizados a pilha e o heap na memória?
sobes.tech IA
Resposta da IA
A pilha é usada para armazenar variáveis locais, parâmetros de funções e endereços de retorno. A memória é alocada e libertada automaticamente, seguindo o princípio LIFO (Last-In, First-Out).
O heap é usado para alocação dinâmica de memória para objetos cujo tamanho é desconhecido durante a compilação ou cuja duração de vida excede o âmbito em que são criados. A gestão de memória no heap é feita manualmente ou através de mecanismos de gestão de memória (ARC em Swift, recolha de lixo em outras linguagens).
| Característica | Pilha | Heap |
|---|---|---|
| Alocação | Automática | Dinâmica (manual ou com MRC/ARC) |
| Libertação | Automática ao sair do âmbito | Manual (free) ou com MRC/ARC |
| Tamanho dos dados | Conhecido em tempo de compilação | Pode ser desconhecido até à execução |
| Acesso | Rápido, sequencial | Mais lento, aleatório |
| Estrutura | LIFO | Grafo de objetos |
| Exemplos | Variáveis locais, parâmetros de funções | Objetos de classes, estruturas de tamanho variável |
// Exemplo de uso de pilha e heap em Swift
func myFunction() {
// Variável local na pilha
var stackVariable: Int = 10
// Objeto de classe no heap
let heapObject = MyClass()
// Tipo de valor na pilha (exceto estruturas que contêm tipos referenciados)
var stackStruct = MyStruct()
// Estrutura que contém um tipo referenciado, parte pode estar no heap
var mixedStruct = MyMixedStruct()
}
class MyClass {
// As propriedades do objeto são armazenadas no heap
var property: String = "Hello"
}
struct MyStruct {
// As propriedades de tipo valor são armazenadas na pilha
var property: Int = 20
}
class MyReferenceType {
var value: Int = 30
}
struct MyMixedStruct {
// Tipo de valor na pilha
var stackProperty: Int = 40
// Tipo referenciado no heap (a própria referência na pilha)
var heapReference: MyReferenceType = MyReferenceType()
}