The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
структуры в памяти, !*! ghost_in_machine, 22-Фев-06, 13:44  [смотреть все]
Здравствуйте! Вопрос касается размещения полей структур в памяти. Я хочу создать функцию для поиска данных в массиве (произвольных) структур, заданных в общем виде как void*. А как задать поле для поиска? В текущем варианте я использую смещение от начала структуры в массиве и длину поля. Но это неудобно т.к. иногда поля приходиться переставляться, что приводит к трудно выводимым ошибкам глубоко в коде программы, кроме того, несколько нелогичным выглядит самому указывать размер поля и размер структуры данного типа, ведь компилятор сам знает о них в каждом конкретном случае. Может кто подскажет, как сделать правильно? Спасибо.
  • структуры в памяти, !*! chip, 15:30 , 22-Фев-06 (1)
    >Здравствуйте! Вопрос касается размещения полей структур в памяти. Я хочу создать функцию
    >для поиска данных в массиве (произвольных) структур, заданных в общем виде
    >как void*. А как задать поле для поиска? В текущем варианте
    >я использую смещение от начала структуры в массиве и длину поля.
    >Но это неудобно т.к. иногда поля приходиться переставляться, что приводит к
    >трудно выводимым ошибкам глубоко в коде программы, кроме того, несколько нелогичным
    >выглядит самому указывать размер поля и размер структуры данного типа, ведь
    >компилятор сам знает о них в каждом конкретном случае. Может кто
    >подскажет, как сделать правильно? Спасибо.

    Как вариант, использовать макрос offsetof .

    • структуры в памяти, !*! ghost_in_machine, 17:58 , 22-Фев-06 (2)
      Хороший макрос, спасибо!

      • структуры в памяти, !*! dimus, 07:22 , 28-Фев-06 (3)
        Еще вариант - есть две структуры: структура фиксированного размера вида
        struct NODE
        {
           struct NODE* next;  // Следующий элемент списка. Если это массив, то ненужен
           int data_type;      // Тип сохраненных данных
           void* data;         // Указатель на сохраненные данные
        }

        Сохраненные данные могут быть любыми. Для них есть два условия:
        1. Данные должны быть такого типа, который известен и их тип помещаться в dada_type
        2. Должен быть зарезервирован тип данных "ПУСТЫЕ ДАННЫЕ"

        При таком типе хранения довольно просто выполнять поиск, сортировку и т.п. для любых типов данных. Вобщем, это попытка на С сделать некое подмножество RTTI




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру