Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 9

Создание переменных в сегменте общей памяти

29.06.2015, 14:02. Показов 1401. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Объясните непутевому мне, пожалуйста. Выделил общий сегмент памяти для межпроцессного взаимодействия с помощью библиотеки shm.h. Как мне теперь размещать там переменные? Желательно без лишних указателей.

Есть указатель *shared_memory, который указывает на начало сегмента

Как присваивать красиво переменным адреса из сегмента?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2015, 14:02
Ответы с готовыми решениями:

Назначение нового основания стека в текущем сегменте стековой памяти
Нужна помощь в написании программы: Составить программу на ассемблере, которая содержит следующую последовательность действий: —...

Уменьшение общей памяти
Привет, уже как пару месяцев назад я купил ссд диск, вроде как на 128 гигов. Когда установил на нее винду показало, что доступно 118 гигов....

Механизм общей памяти
Добрый вечер. Вот строка из задания:"реализовать, используя механизм общей памяти, передачу данных между двумя потоками". ...

2
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
29.06.2015, 20:01
Лучший ответ Сообщение было отмечено ka2r как решение

Решение

в С++ можно было бы назначить адрес ссылке и использовать ее в качестве псевдонима
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
#define CAST_PTR(type, ptr) ((type *)(ptr))
#define DECLARE(type, var, mem) type & var = *(CAST_PTR(type, mem)); \
    mem += sizeof(type)
 
struct some { int x, y; };
static char shared[1024];
int main() {
    char * p = CAST_PTR(char, shared);
    DECLARE(int, i, p);
    DECLARE(double, d, p);
    DECLARE(struct some, ss, p);
 
    i = 13;
    d = 1/3.0;
    ss.x = 100; ss.y = 500;
 
    cout << i << ' ' << &i << endl;
    cout << d << ' ' << &d << endl;
    cout << ss.y << ' ' << &ss << endl;
    return 0;
}
Но мы в разделе Си, а в Си нет ссылок - только указатели, только хардкор
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
#define CAST_PTR(type, ptr) ((type *)(ptr))
#define DECLARE(type, var, mem) type * var = (CAST_PTR(type, mem)); \
    mem += sizeof(type)
 
struct some { int x, y; };
static char shared[1024];
int main() {
    char * p = CAST_PTR(char, shared);
    DECLARE(int, i, p);
    DECLARE(double, d, p);
    DECLARE(struct some, ss, p);
 
    *i = 13;
    *d = 1/3.0;
    ss->x = 100; ss->y = 500;
 
    printf("%d %p\n", *i, CAST_PTR(void, i));
    printf("%lf %p\n", *d, CAST_PTR(void, d));
    printf("%d %p\n", ss->y, CAST_PTR(void, ss));
    return 0;
}
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.06.2015, 21:55
Цитата Сообщение от ka2r Посмотреть сообщение
Как мне теперь размещать там переменные? Желательно без лишних указателей
Без указателей никак. Переменная - это то, чему компилятор статически распределяет память на этапе компиляции. Результат работы shmget (как и malloc) - это то, что появляется в момент исполнения, а потому для компилятора никак не может быть выражено в виде переменной
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2015, 21:55
Помогаю со студенческими работами здесь

Выделение общей части строковых переменных с учетом ошибок
Задача состоит в том, чтобы из ряда строк выделить те, которые содержат в себе строку Z не более чем с двумя отличающимися символами....

Выборка данных из общей памяти
пишу пул процессов для сервера,пул располагается в общем сегменте памяти,с которым все процессы и будут работать,для теста просто пробую...

Доступ процессов к общей области памяти
нужно посчитать сумму значений, которые код генерирует . наскрёб из гугла такое решение, но вылазит &quot;segmentation fault&quot;, походу...

Механизм общей памяти и attach к процессу
Добрый день! Существует следующая задача.Имеется драйвер, получающий скан-код нажатой клавиши.Имеется стороннее приложение (консоль). В...

Клиент-сервер на основе общей памяти с использованием семафоров
Собственно задание: сервер рисует прямоугольник с заданными координатами и цветом. Клиент посылает запрос на рисование, но при этом сервер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru