C имитирует поведение стека в куче

#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. Можно ли это сделать и подтолкнуть какой-либо объект(пожалуйста, предоставьте соответствующий код)?
  2. Будет ли зарезервированное мной место в памяти последовательным(большого размера)?

Комментарии:

1. (int)p скорее всего, это приведет к проблемам, если указатели на вашей платформе не имеют 31 бита

2. Product* p необходимо инициализировать размещение новым, прежде чем использовать его

3. @Alan Birtles, Ах, я обнаружил ошибку: Имя продукта(указатель строки) равно нулю, просто это , я также должен управлять этим.

4. Большая проблема со строкой скоро возникнет hhh

5. @Джонни Мопп, это здорово.