Форум программистов, компьютерный форум CyberForum.ru

Частичное пересекание структур в памяти - C++

Восстановить пароль Регистрация
 
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
30.04.2012, 21:28     Частичное пересекание структур в памяти #1
Есть две структуры:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct s1{
    char ax[40];
    char b[10];
    char c[15];
    int g;
    float v;
}
 
struct s2{
    char b[10];
    char c[15];
    int g;
    float v;
    char az[10];
}
Задача такая - нужно создать структуры так, чтобы элементы этих структур, названия которых совпадают, находились в одной и той же области памяти. Т.е. чтобы с элементов b по v включительно структуры пересекались в памяти и соответственно s1.b и s2.b, s1.c и s2.c, s1.g и s2.g, s1.v и s2.v лежали в одной области памяти.
Возможно ли такое сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
30.04.2012, 21:44     Частичное пересекание структур в памяти #2
Если нужно чтобы все элементы структур находились в памяти последовательно то нет.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
30.04.2012, 22:10     Частичное пересекание структур в памяти #3
как реализовать на С не знаю. думаю нереально.
на C++ можно было бы написать препроцессор, который подменит структуры гораздо более сложным содержимым - классами, которые будут смотреть в одно и то же место в памяти + методы в структурах с названиями b,c,g,v и т.д.
это что первое в голову пришло. вопрос только зачем?
andy_111
90 / 59 / 1
Регистрация: 03.07.2011
Сообщений: 148
30.04.2012, 22:15     Частичное пересекание структур в памяти #4
Чтобы пересекались при совпадении имен? Это наверное только препроцессором. Вообще, можно попробовать эти структуры засунуть в union - тогда одна структура на уровне ее членов наложится на другую структуру. Но в приведенном примере будет каша.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
01.05.2012, 09:56     Частичное пересекание структур в памяти #5
Разве что, если указателями делать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct s1{
    char ax[40];
    char *b;
    char *c;
    int *g;
    float *v;
}; 
struct s2{
    char *b;
    char *c;
    int *g;
    float *v;
    char az[10];
};
Ну, а потом так:
C++
1
2
3
s1 s1_obj;
s2 s2_obj;
s1_obj.b = s2_obj.b = new char[10]; // и так далее
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
01.05.2012, 10:14     Частичное пересекание структур в памяти #6
Конечно, можно. С++ позволяет безболезненно добавлять поля в конец структуры. Остаётся только перенести az.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct s1
{
    char b[10];
    char c[15];
    int g;
    float v;
    char ax[40];
};
 
struct s2
{
    char b[10];
    char c[15];
    int g;
    float v;
    char az[10];
};
А чтобы именно посередине была общая часть - так не получится.
Yandex
Объявления
01.05.2012, 10:14     Частичное пересекание структур в памяти
Ответ Создать тему
Опции темы

Текущее время: 12:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru