Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> про размер указателей, разве он отличен от sizeof(int) 
:(
    Опции темы
yaja
Дата 6.10.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Имеется следующий класс(оставим его функциональную начинку и как написать это-же, но быстрее)


Код

class KDNode {
private:
  float split;
  unsigned int data; 
public:
  KDNode() : data(6), split(0) {}

  void setSplit(float spl) { split = spl; }
  float getSplit() const { return split; }

  void setLeaf(bool leaf) { data = (leaf) ? (data | 4) : (data & 0xfffffffb); }
  bool isLeaf() const { return ((data & 4) > 0); }

  void setAxis(unsigned int axis) { data = (data & 0xfffffffc) + axis; }
  unsigned int getAxis() const { return (data & 3); }

  void setLeft(KDNode* left) { data = (unsigned int)left + (data & 7); } // 1
  KDNode *getLeft() const { return (KDNode *)(data & 0xfffffff8); } // 2
  KDNode *getRight() const { return getLeft() + 1; }

  void setList(ListNode* list) { data = (unsigned int)(list) + (data & 7); } // 3
  ListNode *getList() const { return (ListNode *)(data & 0xfffffff8); }  // 4
  void AddObject(Object *obj);
};

У меня стоит студия 2003 и она мне пишет дурацкие ворнинги, тина размер KDNode* и unsigned int различны
в месте 2 и 4
Цитата
type cast' : conversion from 'const unsigned int' to 'ListNode *' of greater size

а в месте 1 и 3
Цитата
warning C4311: 'type cast' : pointer truncation from 'ListNode *' to 'unsigned int


Я и так и сяк пытался от них избавиться, но тщетно, может кто-то знает в чем тут беда (может в проперти прописать что нужно) и как от этого избавиться (кроме их отключения)
Буду благодарен любой помощи smile
PM MAIL   Вверх
chaos
Дата 7.10.2005, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



во первых я бы
Код

unsigned int data; 

замени на
Код

unsigned long data; //DWORD data;


второе:
одно из решений
например
Код

ListNode *getList() const 
{ return (ListNode *)(data & 0xfffffff8); }

заменить на
Код

ListNode *getList() const 
{ return reinterpret_cast<ListNode *>(data & 0xfffffff8); }


Это сообщение отредактировал(а) chaos - 7.10.2005, 06:18
PM WWW   Вверх
chipset
Дата 7.10.2005, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата
разве он отличен от sizeof(int)

ОХ! Размеры типов в С++ эта такая штука которая меняеться от компилятора к компилятору, поэтому рассчитывать на какой-то определенный размер указателя либо типа очень некрасиво и опасно.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
yaja
Дата 7.10.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Спустя 10 минут, после того, как создал тему, осенило, что наверное на 64-битной платформе sizeof(int) = 4
а указатель имеет размер 8 ))
Есче через 3 минуты нашел в свойствах проекта опцию о проверке совместимости с 64-битной платформой. Если там поставить No то ворнинги пропадают smile

chaos пробовал и то и другое не помагало, но все равно спасибо за помощь.

chipset Канечно некрасиво, но если все-таки использовать, то можно хорошо выровнять данные в кэш-линию и получить + 25-30% скорости, а так, как пишу я для души, а не для компании, то можно и написать такой код smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.