61
Vývoj / C++ stack vs heap.
« kdy: 07. 08. 2020, 20:29:13 »
Dobrý deň. Keď vytvorím triedu / štruktúru na heape, ale jej členovia sú vytvorení statickým viazaním (mali by byť na stacku):
1. Kde sú teda dáta skutočne uložené? Je celá trieda na jednom mieste?
Priznám sa že už som podobné fórum založil inde, ale ani tam som sa veľa nedozvedel.
Poradili mi aby som si to vyskúšal a odtestoval sám. Lenže po tých testoch mám viac otázok ako odpovedí. Napríklad som zistil že aj keď vector alokujem na stacku tak kontainer je síce na stacku ale buffer s položkami vyzerá byť na heape čo ma ešte viac matie.
2. načo sa teda vector vytvára na stacku? Keď jeho buffer je na heape? Je to kôli automatickému uvoľňovaniu pamate?
3. poradíte mi nejaký nástroj na prezeranie byteov pamate? Niečo ako keď si otvorím súbor len by som chcel aby to čítalo RAMku a mohol si zvoliť adresu v pamati atď.
Kód: [Vybrat]
#include <memory>
#include <vector>
#include <string>
using namespace std;
struct BinData {
vector<char> content{'a', 'b', 'c'}; // statické viazanie
wstring contentType{ L"text/plain" };
};
class NejakaTrieda {
shared_ptr<BinData> binData; // binData je pointer teda ukazuje na heap ale kde je vytvorený jeho member content? na stacku či heape?
NejakaTrieda() : binData(new BinData()) {
}
};
shared_ptr<NejakaTrieda> nejakyPointerNaObjekt(new NejakaTrieda());
1. Kde sú teda dáta skutočne uložené? Je celá trieda na jednom mieste?
Priznám sa že už som podobné fórum založil inde, ale ani tam som sa veľa nedozvedel.
Poradili mi aby som si to vyskúšal a odtestoval sám. Lenže po tých testoch mám viac otázok ako odpovedí. Napríklad som zistil že aj keď vector alokujem na stacku tak kontainer je síce na stacku ale buffer s položkami vyzerá byť na heape čo ma ešte viac matie.
2. načo sa teda vector vytvára na stacku? Keď jeho buffer je na heape? Je to kôli automatickému uvoľňovaniu pamate?
3. poradíte mi nejaký nástroj na prezeranie byteov pamate? Niečo ako keď si otvorím súbor len by som chcel aby to čítalo RAMku a mohol si zvoliť adresu v pamati atď.