1
resposta

Codigo compila sem mostrar nenhuma alocação de memória

Tentei jogar no chat gpt e ele me falou pra testar com o seguinte codigo:

#include <iostream>
#include <string>
#include <cstdlib>

void* operator new(size_t bytes) {
    std::cout << "Alocando " << bytes << " bytes" << std::endl;
    return malloc(bytes);
}

int main() {
    int* ptr = new int; // Alocação dinâmica para chamar o operador new
    delete ptr; // Libera a memória alocada
    return 0;
}

Porém ele aloca só 4 bytes, que eu imagino que seja do objeto que eu criei na main.

Codigo no Xcode compila sem mostrar nenhuma alocação de memória.

1 resposta

Olá, Heloisa! Tudo bem?

Pelo que você descreveu, o comportamento do código está correto. Quando você cria um int dinamicamente com new int, ele realmente aloca 4 bytes, que é o tamanho típico de um inteiro em muitas arquiteturas.

Se você quiser ver mais alocações de memória, pode tentar criar objetos mais complexos. Por exemplo, você pode criar uma std::string ou um array de inteiros, o que resultará em mais chamadas ao operador new:

#include <iostream>
#include <string>
#include <cstdlib>

void* operator new(size_t bytes) {
    std::cout << "Alocando " << bytes << " bytes" << std::endl;
    return malloc(bytes);
}

int main() {
    int* ptr = new int; // Aloca 4 bytes
    delete ptr;

    std::string* str = new std::string("Teste"); // Aloca memória para a string
    delete str;

    int* array = new int[10]; // Aloca 40 bytes (10 inteiros)
    delete[] array;

    return 0;
}

Este código deve mostrar mais alocações de memória. A std::string pode alocar memória adicional na heap, dependendo da implementação.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.