The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"структуры в памяти"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "структуры в памяти"  
Сообщение от ghost_in_machine email on 22-Фев-06, 17:58 
Хороший макрос, спасибо!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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