#c #object #memory #stack #heap-memory
Вопрос:
Прежде всего, я новичок в мире c , хочу создать механизм, стек, цель которой прирост производительности, избегая называть его аналог, который прокатного комплекса передач, что затраты времени(что я думаю!), идея в том, чтобы зарезервировать достаточное пространство по мере необходимости(возможно 200 МБ) и пытаются манипулировать напрямую это пространство без вызова функций malloc, но ошибка возникает, как: (vcruntime140d.dll) in LearningC .exe: 0xC0000005: Access violation writing location 0xCDCDCDCD
, то это доказывает, что я должен учиться больше из С (может быть), вот мой код:
struct Product { std::string Name; float Price; float qte; }; class MyStack { void* p; int position; public: MyStack() { position = 0; p = malloc(1024); } void* Push(rsize_t size) { int pos = ((int)p) position; void* tt = (int*)pos; position = sizeof(size); return tt; } }; void main() { MyStack* s = new MyStack();; int* i1= (int*)s-gt;Push(sizeof(int)); int* i2 = (int*)s-gt;Push(sizeof(int)); *i1 = 1234; *i2 = 6789; Product* p = (Product*)s-gt;Push(sizeof(Product)); p-gt;Name = "Any product"; std::cout lt;lt; *i1 lt;lt; " - " lt;lt; *i2 lt;lt;"-"lt;lt;p-gt;Name lt;lt; std::endl; }
Вот мои вопросы:
- Можно ли это сделать и подтолкнуть какой-либо объект(пожалуйста, предоставьте соответствующий код)?
- Будет ли зарезервированное мной место в памяти последовательным(большого размера)?
Комментарии:
1.
(int)p
скорее всего, это приведет к проблемам, если указатели на вашей платформе не имеют 31 бита2.
Product* p
необходимо инициализировать размещение новым, прежде чем использовать его3. @Alan Birtles, Ах, я обнаружил ошибку: Имя продукта(указатель строки) равно нулю, просто это , я также должен управлять этим.
4. Большая проблема со строкой скоро возникнет hhh
5. @Джонни Мопп, это здорово.