Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Коллеги, день добрый. Подскажите, плиз, как можно в Linux, на чистом си (т.е. НЕ с++), реализовать следующее. Выделить одну непрерывную область памяти и в ней расположить свои переменные (целые, вещественные) и данные в том порядке, который мне необходим. И это вообще – реализуемо? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 17:17 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Объявляешь struct с полями нужного типа в нужном порядке. Потом выделяешь под него память. В чём проблема-то? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 17:41 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Хмм.... Загнать все переменные из кода в одну структуру - ну ладно, это я еще можно попробовать. Хотя с трудом представляю, как математику в таком формате обсчитывать. Кроме того, если правильно помню, структура на стеке размечается, а он довольно небольшой по размерам. хоть и неудобно будет. А вот у данных - своя структура организации и динамики изменения в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:04 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Загнать все переменные из кода в одну структуру - ну ладно, это я еще можно попробовать. Хотя с трудом представляю, как математику в таком формате обсчитывать. Ну, ты же сам пожелал странного: "выделить одну непрерывную область памяти и в ней расположить свои переменные". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:16 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Объясните яснее свою задачу. последний пост - какой-то полностью неосмысленный набор слов. IMHO p.s. "структура" и "на стеке" понятия совершенно перпендикулярные ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:17 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70, форум в смятении. Вы усугубили требование аллокации, добавив туда свои пожелания по "непрерывности". И насколько глубоко мы должны ее обеспечить? Чтобы адреса ячеек шли подряд? Или может быть чтобы битики в матрице рядышком стояли. Или чтоб на 1 планке памяти или на 1 кристале вас массивчик лежал. Вобщем проясните ваш причудливый каприз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:38 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, объект структура в безвоздушном пространстве хранятся? А я думал в памяти. Только вот она разная, эта память. Поэтому особой "перпендикулярности" я не вижу. Задача - в первом посте сформулирована. Если говорить о предметной области - то это много специфичной математики, часть данных онлайн поступает по сети. Хочу разнести в памяти и правильно переложить данные, чтобы по максимуму кеши процессорные задействовать. Отсюда и вопрос. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:39 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Как-то так. Тогда любая переменная, включая простые, структурированные и типа массив хранятся в памяти непрерывно. malloc() и Ко тоже выделяют непрерывные области памяти. Что полностью удовлетворяет требования задачи, сформулированной в первом посте. Как-то так. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:42 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70чтобы по максимуму кеши процессорные задействовать Чаво задействовать ? Почитай про calloc()/malloc() А лучше какую-нибудь книжку по Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:55 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, извини, конечно, за прямоту. Твой ответ называется "ответом программиста" - абсолютно точный и настолько же бесполезный. Есть данные. Поступают они с разной интенсивностью, которая в первом приближении - понятна. Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того, забирает из памяти данные, которые ему сейчас не нужны. Как минимум, я хочу разнести данные с разной интенсивностью обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:55 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Dima T, )))))))))))))))))))))))))))))))))) В книгах по Си об этом не пишут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:56 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Dima T, )))))))))))))))))))))))))))))))))) В книгах по Си об этом не пишут. О чем этом? Набери в гугле "calloc()" или "malloc()" но лучше возьми вторую книгу (если попалась та где не пишут, сомневаюсь что такая есть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:19 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того, забирает из памяти данные, которые ему сейчас не нужны. Как минимум, я хочу разнести данные с разной интенсивностью обновления. Непрерывный кусок можно выделить calloc()/malloc() или просто в стэке. Другой вопрос как ты этим куском будешь пользоваться, кроме того есть размер кэша проца, куда не только твой кусок данных лезет, но и куски кода, которые их обрабатывают. И куски данных/кода других процессов кторые выполняются в это же время параллельно. Нельзя сказать процу "этот кусок всегда держи в кэше", да и кэшей у него несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:26 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Как минимум, я хочу разнести данные с разной интенсивностью обновления. преждевременная оптимизация разберитесь сначала с распределением памяти (стек, куча), указателями и адресной арифметикой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:28 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того, забирает из памяти данные, которые ему сейчас не нужны. А почему ты думаешь, что кэш процессора способен хранить только непрерывные области памяти?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:32 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Изопропилразберитесь сначала с распределением памяти (стек, куча), указателями и адресной арифметикой +1 Читай книжки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:49 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Хочу разнести в памяти и правильно переложить данные, чтобы по максимуму кеши процессорные задействовать. Могу посоветовать ознакомиться: RAM - не RAM, или Cache-Conscious Data Structures ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 19:58 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Коллеги, я конечно, все понимаю...... И про адресную арифметику я знаю..... Понятно, что на поверхности простое решение: выделил несколько кусков памяти по типам переменных, бегай указателями и пиши-читай что надо. Вопрос - возможно ли в одном куске. У меня был простой и понятный вопрос в первом посте... Смысл углубляться и обсуждать вопрос - надо не это, или нет? Если никто из вас не сталкивался с задачами оптимизации кеша - просто так и скажите. Я по вопросам вижу, что большая часть даже предмета не представляет, что-то там про книги советуют.... Если кто уже это делал - посоветуйте, если нет - давайте закроем тему и не будем тратить время друг друга. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 22:01 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Вопрос - возможно ли в одном куске. зачем несколько кусков по типам - массив структур используйте в структуре - выравнивание с учётом размера линии кэша, память - выделяйте memalign ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 22:43 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Вопрос - возможно ли в одном куске.так структура то чем не подошла? Хинт: вот это: Кроме того, если правильно помню, структура на стеке размечаетсяошибка, есичё. Хочешь - на стеке размещай, хочешь - в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 22:45 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Вопрос - возможно ли в одном куске. Еще раз про "один кусок". Своим malloc выделяем один кусок нужного нам размера и дальше у же в нем производим запросы на n других кусков ... /понятно, что если "одного куска" будет не достаточно, то .../ Автор topic на мой взгляд хочет понять как интерпретаторы решают вопрос распределения и использования памяти под переменные. PS: Автору topic. Если вас правильно понял, то вот и поищите в inet ответ на этот вопросю Информации валом ... Загляните к Кнуту ... ... ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 22:57 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
S70Коллеги, я конечно, все понимаю...... И про адресную арифметику я знаю..... Понятно, что на поверхности простое решение: выделил несколько кусков памяти по типам переменных, бегай указателями и пиши-читай что надо. Вопрос - возможно ли в одном куске. У меня был простой и понятный вопрос в первом посте... Смысл углубляться и обсуждать вопрос - надо не это, или нет? Если никто из вас не сталкивался с задачами оптимизации кеша - просто так и скажите. Я по вопросам вижу, что большая часть даже предмета не представляет, что-то там про книги советуют.... Если кто уже это делал - посоветуйте, если нет - давайте закроем тему и не будем тратить время друг друга. Спасибо Ваш вопрос понятен. Это можно сделать например так Код: plaintext 1. 2. 3. 4. 5. Но дело в том, что все данные в памяти это уровень сигнала, или нули и единицы, потому при записи/чтении данных в память необходимо знать с каким типом данных вы работаете. Вам придётся сопровождать вспомогательный массив в котором будет храниться тип данных конкретного элемента и сдвиг внутри основного массива. Либо можно разбить массив на три логических куска, но это вам видимо не подойдёт. Может быть используете такой вариант, но это не совсем то что вы хотите Код: plaintext 1. 2. 3. 4. 5. 6. Не уверен что вы узнаете что-то новое (хотя Anatoly Moskovsky и MasterZiv ещё ничего не сказали, они могут знать что-то ещё), и дело не в том что вы пишите о том, что кто-то вас не понимает, вас прекрасно понимают, и то что вы просите реализовать возможно, пожалуй, только способом предложенным выше, что не очень удобно. Расскажите нам как вы решите данную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 02:25 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
SashaMercury(хотя Anatoly Moskovsky и MasterZiv ещё ничего не сказали Не сказали потому что решение приведено в первом же ответе, и потом еще как минимум раз. Чего по сто раз повторять, если со второго раза не доходит )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 05:40 |
|
||
|
Размещение в памяти переменных на чистом Си
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, я могу лишь в десятый раз сказать прямо: кэширование не управляется никак. Если ты будешь подгонять программу под структуру кэша одной машины, то на другой машине это уже не будет работать, и соответственно оптимизация бессмысленна. К тому же, как уже не раз говорено, главный источник оптимизации программы - это алгоритм обработки данных, и возможно кэширование в памяти вместо чтения с диска, там разница в доступе в миллионы раз. А кэш или не кэш - в десятки раз, что немного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 07:39 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2018991]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
119ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 351ms |

| 0 / 0 |
