Stack vs Heap Tentando Entender!

1. Stack vs Heap Tentando Entender!

Nick Us
Nick-us

(usa Slackware)

Enviado em 11/06/2020 - 03:59h

Esbarrei com Stack e Heap ao tentar escolher a forma como vou declarar meus Widgets, pois eu estava na dúvida se era melhor declarar como ponteiros (O mais comum por toda a internet) ou não declará-los como ponteiros.

Para piorar a situação, entendi que Stack é muito mais rápido e melhor que Heap, e um dos maiores motivos que considero importante é que entendi que Heap vai ficar acessando meu Hd o que reduz sua vida útil, enquanto Stack vai manter tudo na RAM.

Como no momento meu Objetivo é usar a RAM e não o Hd, prefiro Stack!

Mas não sei quando eu uso Heap e quando eu uso Stack! Esse é meu problema!

Então vou informar o que entendi sobre como declarar eles em um programa! E no Código o que não identifiquei!
#include <string>

// O que ela são? Heap ou Stack?
int Global_1; // Não Inicializada
int Global_2 = 7; // Inicializada
int *Global_3;
const char *Nome1 = "Viva o Linux";

class Brasil {
// O que ela são? Heap ou Stack?
int A; // Não Inicializada
int B = 7; // Inicializada
int *C;
const char *Nome2 = "Viva o Linux";
};

void Function() {
// O que ela são? Heap ou Stack?
int Variavel1;
int Variavel2 = 7;
int *Variavel3;
const char *Nome3 = "Viva o Linux";

Brasil *Heap_Ponteiro1 = new Brasil; // Entendi que é Heap
delete Heap_Ponteiro1;

Brasil Var_Stack1(); // Entendi que é Stack
}

int main(void) {
// O que ela são? Heap ou Stack?
int Variavel1;
int *Variavel2;
const char *Nome4 = "Viva o Linux";

int Stack_Variavel2 = 7; // Entendi que é Stack

Brasil *Heap_Ponteiro2 = new Brasil; // Entendi que é Heap
delete Heap_Ponteiro2;

Brasil Var_Stack2(); // Entendi que é Stack
return 0;
}

Somente Ponteiros que criam Objetos seriam Heap certo? Usando o new por exemplo!
Ou qualquer um que usar "new", por estar criando algo novo é Heap?

Stack seria tudo o que eu já reservei ao iniciar o programa? E Heap seria tudo o que eu crio durante o programa?

Todas as variáveis inicializadas seriam Stack? Enquanto as que não foram inicializadas seriam Heap?

A Dúvida e a confusão começou assim:
Fl_Window FrmMain(300, 200); // Gosto de escrever assim
FrmMain.show();

Fl_Window *FrmMain = new Fl_Window(300, 200); // Acho assim mais trabalhoso
FrmMain->show();

E fiquei ainda mais sem entender, porque falam sobre ponteiros que seriam Heap, porém, as 2 declarações acima eu estou criando um Objeto dentro do Main, ou seja, na minha opinião, eles no momento da criação seriam Stack e não Heap.

Criei o exemplo acima, para enxergar na prática onde está Stack e onde está o Heap no meu programa! Pq se eu puder, vou criar tudo Stack conforme informei!


  


2. Re: Stack vs Heap Tentando Entender!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/06/2020 - 19:47h

Veja se se ajuda: https://www.vivaolinux.com.br/topico/C-C++/Ponteiros-Liberar-memoria-excluindo-objetos-e-variaveis-n....


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts