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

Порядок хранения структур в ОЗУ и memset - C++

Восстановить пароль Регистрация
 
somwan
2 / 2 / 1
Регистрация: 15.04.2014
Сообщений: 8
27.11.2014, 09:37     Порядок хранения структур в ОЗУ и memset #1
Всем добра!

Вопрос в следующем. если объявить массив например m[100] - то он будет храниться в ОЗУ как сплошная последовательность символов и для обнуления этого массива можно использовать функцию memset(m, 0, sizeof(m)); А как именно в ОЗУ хранятся структуры? Тоже как сплошная последовательность, или как-то иначе? Цель вопроса состоит в понимании можно ли для обнуления структур использовать функцию memset();
например:
C++
1
2
3
4
5
6
7
8
9
struct STR { 
 
                          unsigned char m[100];
                          long int p1;
                          int p2;
 
} str;
 
    memset(&str, 0, sizeof(STR));
сомнение есть в том, что так можно делать. Потому что непонятно как именно хранятся данные структуры в ОЗУ.

Добавлено через 17 минут
Пожалуй стоит уточнить. Я так делаю, и при проверке вроде бы и работает, но в программе есть непонятный глюк, в участке работающего кода не так уж много, и среди него memset() - используемая как раз для обнуления структуры. Вот и возникло предположение о том что из-за неё глючит. Может кто сталкивался.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
27.11.2014, 09:56     Порядок хранения структур в ОЗУ и memset #2
Цитата Сообщение от somwan Посмотреть сообщение
в программе есть непонятный глюк
Выложите код, посмотрим
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
27.11.2014, 09:59     Порядок хранения структур в ОЗУ и memset #3
В данном случае так можно делать. Структура занимает непрерывный участок памяти. Глюк, очевидно, имеет другую причину.
Приведенный код не дает информации о вероятных причинах глюка.
somwan
2 / 2 / 1
Регистрация: 15.04.2014
Сообщений: 8
27.11.2014, 10:08  [ТС]     Порядок хранения структур в ОЗУ и memset #4
Я не прошу искать эту причину. Я спрашиваю о том как структуры хранятся в ОЗУ, сплошной последовательностью байтов, или же по переменным из состава структуры. Если первое, то memset() пригоден, если второе, то нет. вопрос только в этом. Я уже начинаю склоняться что первый вариант. И уже от многих слышал то же (спасибо CheshireCat). Глюк я и сам выведу, это вопрос времени.
demmax2004
57 / 135 / 35
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
27.11.2014, 10:11     Порядок хранения структур в ОЗУ и memset #5
Цитата Сообщение от somwan Посмотреть сообщение
Тоже как сплошная последовательность
Да, но с выравниванием по границе 4 байта(для x32 систем)

Цитата Сообщение от somwan Посмотреть сообщение
ОЗУ как сплошная последовательность символов
да, но с учетом выравнивания членов структуры.

memset(&str, 0, sizeof(STR));
Все ОК.
somwan
2 / 2 / 1
Регистрация: 15.04.2014
Сообщений: 8
27.11.2014, 10:14  [ТС]     Порядок хранения структур в ОЗУ и memset #6
Ну хорошо, спасибо за обсуждение. Сомнение разрешено.
Yandex
Объявления
27.11.2014, 10:14     Порядок хранения структур в ОЗУ и memset
Ответ Создать тему
Опции темы

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