0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 9

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

29.06.2015, 14:02. Показов 1411. Ответов 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 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru