Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 14:59   #1
goluzov
Форумчанин
 
Регистрация: 26.06.2010
Сообщений: 168
По умолчанию стек

в стек обычно записываюся значения и адреса. значения не превышающие 32 бита. и адреса соответствено 32 бита

я не могу понять... значение 128 бит как то можно записать в стек? не используя для этого сам адрес на 128 битное значение

так вообще обычно делает ктонибудь?
goluzov вне форума Ответить с цитированием
Старый 27.11.2011, 15:12   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Код:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <stack>
class EntryBase
{
public:
  virtual ~EntryBase() { };
};

template <typename T>
class Entry : public EntryBase
{
public:

  Entry(T t) : value(t) { }
  T value;

private:
  Entry() { }
  Entry& operator = (const Entry& e) { }
};

class Container
{
public:
  template <typename T>
  void put(const T& t)
  {
    EntryBase* e = new Entry<T>(t);
    s.push(e);
  }

  template <typename T>
  T pop()
  {
    EntryBase* e = s.top();
    Entry<T>* entry = static_cast<Entry<T>*>(e);
    s.pop();

    T value = entry->value;
    delete entry;

    return value;
  }

private:
  std::stack<EntryBase*> s;
};

int main()
{
  Container c;

  c.put<float>(5.3f);
  c.put<int>(4);
  c.put<float>(7.8f);
  c.put<std::string>("123");

  std::string s1 = c.pop<std::string>(); //--> "123"
  float f1 = c.pop<float>(); // --> 7.8
  int i1 = c.pop<int>(); // --> 4
  float f2 = c.pop<float>(); // --> 5.3

  return 0;
}
Да хоть свой класс матриц или набор callback'ов можете в стек пихать, что угодно...
Kostia вне форума Ответить с цитированием
Старый 27.11.2011, 15:14   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от goluzov Посмотреть сообщение
в стек обычно записываюся значения и адреса. значения не превышающие 32 бита. и адреса соответствено 32 бита

я не могу понять... значение 128 бит как то можно записать в стек? не используя для этого сам адрес на 128 битное значение

так вообще обычно делает ктонибудь?
Я не знаб, откуда вы почерпнули это информацию, но она очевидно некорректная. В стек можно записать и, например, 64 килобайта, если размер стека это позволяет делать.

32 бита составляется размер регистра на 32-битовых платформах и называется машшиным словом. Но с помощью машинных команд можно копировать машинных слов столько, скоько вам нужно, если в наличии имеется достаточный объем памяти.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.11.2011, 15:35   #4
goluzov
Форумчанин
 
Регистрация: 26.06.2010
Сообщений: 168
По умолчанию

я знаю что в стек записывается командой push. а больше 32 бит она не может сделать запись
goluzov вне форума Ответить с цитированием
Старый 27.11.2011, 17:08   #5
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от goluzov Посмотреть сообщение
я знаю что в стек записывается командой push. а больше 32 бит она не может сделать запись
Ну, если знаете, то что же спрашиваете?! Но я бы опять, как в предыдущем вашем вопросе про массивы, сначала бы изучил команду push, прежде чем безответственно нести всякую чушь!

Кроме того есть очень простая машинная команда, которая называется вычитанием. То есть берете указатель стека, который представляет собой регистр, и вычитаете из его значение столько, сколько вам захочется! Тем самым вы перемещаете указатель стека на любое значение!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стек cop08 Общие вопросы C/C++ 1 25.03.2011 19:18
стек spider844360 Паскаль, Turbo Pascal, PascalABC.NET 1 19.09.2010 16:58
Стек в С++ skiffter Помощь студентам 3 26.03.2010 09:57
Стек. pa6kevi4 Помощь студентам 5 12.03.2010 15:38