powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размещение в памяти переменных на чистом Си
25 сообщений из 30, страница 1 из 2
Размещение в памяти переменных на чистом Си
    #38961861
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,

день добрый. Подскажите, плиз, как можно в Linux, на чистом си (т.е. НЕ с++), реализовать следующее. Выделить одну непрерывную область памяти и в ней расположить свои переменные (целые, вещественные) и данные в том порядке, который мне необходим. И это вообще – реализуемо?

Спасибо
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961887
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объявляешь struct с полями нужного типа в нужном порядке. Потом выделяешь под него память.
В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961911
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Хмм.... Загнать все переменные из кода в одну структуру - ну ладно, это я еще можно попробовать. Хотя с трудом представляю, как математику в таком формате обсчитывать. Кроме того, если правильно помню, структура на стеке размечается, а он довольно небольшой по размерам. хоть и неудобно будет. А вот у данных - своя структура организации и динамики изменения в памяти.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Загнать все переменные из кода в одну структуру - ну ладно, это я еще можно
попробовать. Хотя с трудом представляю, как математику в таком формате обсчитывать.
Ну, ты же сам пожелал странного: "выделить одну непрерывную область памяти и в ней
расположить свои переменные".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961926
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните яснее свою задачу.
последний пост - какой-то полностью неосмысленный набор слов. IMHO

p.s. "структура" и "на стеке" понятия совершенно перпендикулярные )))
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961942
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70, форум в смятении. Вы усугубили требование аллокации, добавив туда свои пожелания по "непрерывности".
И насколько глубоко мы должны ее обеспечить? Чтобы адреса ячеек шли подряд? Или может быть чтобы битики
в матрице рядышком стояли. Или чтоб на 1 планке памяти или на 1 кристале вас массивчик лежал.

Вобщем проясните ваш причудливый каприз.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961944
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

объект структура в безвоздушном пространстве хранятся? А я думал в памяти. Только вот она разная, эта память. Поэтому особой "перпендикулярности" я не вижу. Задача - в первом посте сформулирована. Если говорить о предметной области - то это много специфичной математики, часть данных онлайн поступает по сети. Хочу разнести в памяти и правильно переложить данные, чтобы по максимуму кеши процессорные задействовать. Отсюда и вопрос. Как-то так.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961947
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Как-то так.
Тогда любая переменная, включая простые, структурированные и типа массив хранятся в памяти
непрерывно. malloc() и Ко тоже выделяют непрерывные области памяти. Что полностью
удовлетворяет требования задачи, сформулированной в первом посте. Как-то так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961956
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70чтобы по максимуму кеши процессорные задействовать
Чаво задействовать ?

Почитай про calloc()/malloc() А лучше какую-нибудь книжку по Си.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961958
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

извини, конечно, за прямоту. Твой ответ называется "ответом программиста" - абсолютно точный и настолько же бесполезный.
Есть данные. Поступают они с разной интенсивностью, которая в первом приближении - понятна. Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того, забирает из памяти данные, которые ему сейчас не нужны. Как минимум, я хочу разнести данные с разной интенсивностью обновления.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961964
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

)))))))))))))))))))))))))))))))))) В книгах по Си об этом не пишут.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961986
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Dima T,

)))))))))))))))))))))))))))))))))) В книгах по Си об этом не пишут.
О чем этом?
Набери в гугле "calloc()" или "malloc()"
но лучше возьми вторую книгу (если попалась та где не пишут, сомневаюсь что такая есть).
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961990
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того, забирает из памяти данные, которые ему сейчас не нужны. Как минимум, я хочу разнести данные с разной интенсивностью обновления.
Непрерывный кусок можно выделить calloc()/malloc() или просто в стэке. Другой вопрос как ты этим куском будешь пользоваться, кроме того есть размер кэша проца, куда не только твой кусок данных лезет, но и куски кода, которые их обрабатывают. И куски данных/кода других процессов кторые выполняются в это же время параллельно.
Нельзя сказать процу "этот кусок всегда держи в кэше", да и кэшей у него несколько.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961993
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Как минимум, я хочу разнести данные с разной интенсивностью обновления.
преждевременная оптимизация

разберитесь сначала с распределением памяти (стек, куча),
указателями и адресной арифметикой
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38961995
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Когда данные криво лежат, проц постоянно промахивается по кешу, кроме того,
забирает из памяти данные, которые ему сейчас не нужны.
А почему ты думаешь, что кэш процессора способен хранить только непрерывные области памяти?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962000
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилразберитесь сначала с распределением памяти (стек, куча),
указателями и адресной арифметикой
+1
Читай книжки.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962006
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Хочу разнести в памяти и правильно переложить данные, чтобы по максимуму кеши процессорные задействовать.
Могу посоветовать ознакомиться: RAM - не RAM, или Cache-Conscious Data Structures
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962088
S70
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,

я конечно, все понимаю...... И про адресную арифметику я знаю..... Понятно, что на поверхности простое решение: выделил несколько кусков памяти по типам переменных, бегай указателями и пиши-читай что надо. Вопрос - возможно ли в одном куске.

У меня был простой и понятный вопрос в первом посте... Смысл углубляться и обсуждать вопрос - надо не это, или нет? Если никто из вас не сталкивался с задачами оптимизации кеша - просто так и скажите. Я по вопросам вижу, что большая часть даже предмета не представляет, что-то там про книги советуют....

Если кто уже это делал - посоветуйте, если нет - давайте закроем тему и не будем тратить время друг друга.

Спасибо
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962103
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Вопрос - возможно ли в одном куске
Можно и зачастую это более эффективно чем использовать malloc ...
Имеется несколько общеизвестных и популярных проектов:

https://github.com/rust-lang/jemalloc
https://github.com/Rotkaermota/libcmt-nomem
http://sourceforge.net/projects/mcmlib/
http://g.oswego.edu/dl/html/malloc.html
https://github.com/aumcode/nfx
...
...

PS: Тема очень важная. Чрезвычайно интересная и полезная.
У меня к сожалению пока только в планах разработать свою library
/почему не использовать приведенные ... - то долгий сказ/

Если тебя этот вопрос очень интересует, то познакомься с существующими подходами к
решению этого вопроса ... /проще говоря изучи этот вопрос/.

"Вот тебе голубчик овчинный тулупчик" ...

http://en.wikipedia.org/wiki/Memory_management
http://en.wikipedia.org/wiki/Automatic_variable
http://en.wikipedia.org/wiki/Demand_paging
http://en.wikipedia.org/wiki/Page_cache
http://en.wikipedia.org/wiki/Cache_(computing)
http://en.wikipedia.org/wiki/Cache_algorithms
http://en.wikipedia.org/wiki/Cache-oblivious_algorithm
http://en.wikipedia.org/wiki/Locality_of_reference
http://en.wikipedia.org/wiki/File_system_fragmentation
http://en.wikipedia.org/wiki/Scalable_locality
http://en.wikipedia.org/wiki/Distributed_cache
http://en.wikipedia.org/wiki/Cache_coloring
http://en.wikipedia.org/wiki/Cache_hierarchy
http://en.wikipedia.org/wiki/Cache_stampede
http://en.wikipedia.org/wiki/Cache_language_model
http://en.wikipedia.org/wiki/Database_caching
http://en.wikipedia.org/wiki/Dirty_bit
http://en.wikipedia.org/wiki/Disk_buffer
http://en.wikipedia.org/wiki/Cache_manifest_in_HTML5
http://en.wikipedia.org/wiki/Five-minute_rule
http://en.wikipedia.org/wiki/Pipeline_burst_cache
http://en.wikipedia.org/wiki/Temporary_file
http://en.wikipedia.org/wiki/Page_replacement_algorithm

http://en.wikipedia.org/wiki/Code_segment
http://en.wikipedia.org/wiki/Memory_segmentation
http://en.wikipedia.org/wiki/Address_space
http://en.wikipedia.org/wiki/Segmentation_(memory)
http://en.wikipedia.org/wiki/Virtualization
http://en.wikipedia.org/wiki/.bss
http://en.wikipedia.org/wiki/Uninitialized_variable
http://en.wikipedia.org/wiki/Data_segment
http://en.wikipedia.org/wiki/Virtual_address_space
http://en.wikipedia.org/wiki/Virtual_memory
http://en.wikipedia.org/wiki/Flat_memory_model
http://en.wikipedia.org/wiki/Intel_Memory_Model
http://en.wikipedia.org/wiki/Memory_model
http://en.wikipedia.org/wiki/Consistency_model
http://en.wikipedia.org/wiki/Cache_coherence
http://en.wikipedia.org/wiki/Memory_barrier
http://en.wikipedia.org/wiki/Non-blocking_algorithm
http://en.wikipedia.org/wiki/Deadlock
http://en.wikipedia.org/wiki/Banker's_algorithm
http://en.wikipedia.org/wiki/Edsger_W._Dijkstra
http://en.wikipedia.org/wiki/Infinite_loop
http://en.wikipedia.org/wiki/File_locking
http://en.wikipedia.org/wiki/Readers-writer_lock
http://en.wikipedia.org/wiki/Concurrent_data_structure
http://en.wikipedia.org/wiki/ABA_problem
http://en.wikipedia.org/wiki/Compare-and-swap
http://en.wikipedia.org/wiki/Fetch-and-add
http://en.wikipedia.org/wiki/Transactional_memory
http://en.wikipedia.org/wiki/Communicating_sequential_processes
http://en.wikipedia.org/wiki/Mutual_exclusion
http://en.wikipedia.org/wiki/Mutually_exclusive_events
http://en.wikipedia.org/wiki/Probability_theory
http://en.wikipedia.org/wiki/Collectively_exhaustive_events
http://en.wikipedia.org/wiki/Disjoint_sets
http://en.wikipedia.org/wiki/Synchronicity
http://en.wikipedia.org/wiki/Semaphore_(programming)
http://en.wikipedia.org/wiki/Monitor_(synchronization)
http://en.wikipedia.org/wiki/Producer-consumer_problem
http://en.wikipedia.org/wiki/FIFO
http://en.wikipedia.org/wiki/Garbage_in,_garbage_out
http://en.wikipedia.org/wiki/LIFO_(computing)
http://en.wikipedia.org/wiki/Queue
http://en.wikipedia.org/wiki/Linearizability
http://en.wikipedia.org/wiki/ACID
http://en.wikipedia.org/wiki/Read-copy-update
http://en.wikipedia.org/wiki/Preemption_(computing)
http://en.wikipedia.org/wiki/Nonpreemptive_multitasking
http://en.wikipedia.org/wiki/Computer_multitasking
http://en.wikipedia.org/wiki/Real-time_computing
http://en.wikipedia.org/wiki/Synchronization
http://en.wikipedia.org/wiki/Pipeline_(software)
http://en.wikipedia.org/wiki/Spinlock
http://en.wikipedia.org/wiki/Busy_waiting
http://en.wikipedia.org/wiki/Seqlock
http://en.wikipedia.org/wiki/Ticket_lock
http://en.wikipedia.org/wiki/Namespace
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962106
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Вопрос - возможно ли в одном куске.
зачем несколько кусков по типам - массив структур используйте
в структуре - выравнивание с учётом размера линии кэша,
память - выделяйте memalign
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962107
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Вопрос - возможно ли в одном куске.так структура то чем не подошла?

Хинт: вот это: Кроме того, если правильно помню, структура на стеке размечаетсяошибка, есичё.
Хочешь - на стеке размещай, хочешь - в куче.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962109
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Вопрос - возможно ли в одном куске.
Еще раз про "один кусок".
Своим malloc выделяем один кусок нужного нам размера и дальше у же в нем производим
запросы на n других кусков ... /понятно, что если "одного куска" будет не достаточно, то .../
Автор topic на мой взгляд хочет понять как интерпретаторы решают вопрос распределения и
использования памяти под переменные.

PS: Автору topic.
Если вас правильно понял, то вот и поищите в inet ответ на этот вопросю
Информации валом ...
Загляните к Кнуту ... ... ...
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962138
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S70Коллеги,

я конечно, все понимаю...... И про адресную арифметику я знаю..... Понятно, что на поверхности простое решение: выделил несколько кусков памяти по типам переменных, бегай указателями и пиши-читай что надо. Вопрос - возможно ли в одном куске.

У меня был простой и понятный вопрос в первом посте... Смысл углубляться и обсуждать вопрос - надо не это, или нет? Если никто из вас не сталкивался с задачами оптимизации кеша - просто так и скажите. Я по вопросам вижу, что большая часть даже предмета не представляет, что-то там про книги советуют....

Если кто уже это делал - посоветуйте, если нет - давайте закроем тему и не будем тратить время друг друга.

Спасибо

Ваш вопрос понятен. Это можно сделать например так
Код: plaintext
1.
2.
3.
4.
5.
	void* data = (void*)malloc(1024);
	*((char*)data + 0) = 'a';
	*((int*)data + 1) =  1024;
	*((double*)data + 5) = 0.12345;
	printf("%c %i %f", *((char*)data + 0), *((int*)data + 1), *((double*)data + 5));



Но дело в том, что все данные в памяти это уровень сигнала, или нули и единицы, потому при записи/чтении данных в память необходимо знать с каким типом данных вы работаете. Вам придётся сопровождать вспомогательный массив в котором будет храниться тип данных конкретного элемента и сдвиг внутри основного массива. Либо можно разбить массив на три логических куска, но это вам видимо не подойдёт.

Может быть используете такой вариант, но это не совсем то что вы хотите
Код: plaintext
1.
2.
3.
4.
5.
6.
struct math_data
{
	char* c;
	int* i;
	double* d;
};



Не уверен что вы узнаете что-то новое (хотя Anatoly Moskovsky и MasterZiv ещё ничего не сказали, они могут знать что-то ещё), и дело не в том что вы пишите о том, что кто-то вас не понимает, вас прекрасно понимают, и то что вы просите реализовать возможно, пожалуй, только способом предложенным выше, что не очень удобно. Расскажите нам как вы решите данную задачу.
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962163
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury(хотя Anatoly Moskovsky и MasterZiv ещё ничего не сказали
Не сказали потому что решение приведено в первом же ответе, и потом еще как минимум раз.
Чего по сто раз повторять, если со второго раза не доходит ))
...
Рейтинг: 0 / 0
Размещение в памяти переменных на чистом Си
    #38962183
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

я могу лишь в десятый раз сказать прямо: кэширование не управляется никак. Если ты будешь подгонять программу под структуру кэша одной машины, то на другой машине это уже не будет работать, и соответственно оптимизация бессмысленна.

К тому же, как уже не раз говорено, главный источник оптимизации программы - это алгоритм обработки данных, и возможно кэширование в памяти вместо чтения с диска, там разница в доступе в миллионы раз. А кэш или не кэш - в десятки раз, что немного.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размещение в памяти переменных на чистом Си
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]