-47 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 204
|
|
1 | |
Статическая и динамическая память03.06.2018, 11:36. Показов 6615. Ответов 27
Метки нет (Все метки)
Правда ли это:
1. что и статические, и динамические переменные при запуске программы попадают в одну и ту же часть виртуальной памяти — кучу (heap)? 2. что динамические переменные, как и статические, доступны из любого места программы, если только не было команды освободить участок, занимаемый ими?
0
|
03.06.2018, 11:36 | |
Ответы с готовыми решениями:
27
Азы: статическая память, динамическая память, автоматическая память Статическая память,Динамическая память. Статическая или динамическая библиотека Динамическая строка или статическая? |
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
03.06.2018, 11:42 | 2 |
Jzx,
1. Нет 2. Нет
0
|
-47 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 204
|
|
03.06.2018, 11:55 [ТС] | 3 |
nonedark2008, а что все-таки попадает в кучу, и куда попадает все остальное? И почему 2. Нет ? Помогите пожалуйста разобраться детально с этими вещами.
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
03.06.2018, 12:59 | 4 |
Статический переменные попадают в стек, динамические - в кучу.
На счет второго я ошибся, неправильно вопрос прочитал. Там ответ да. Добавлено через 11 минут Я опять не подумал и обманул тебя. В кучу идут динамические объекты, в стек - локальные. Статические переменные, глобальные переменные обычно хранятся в отдельном участке памяти.
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 13:08 | 5 |
Program code and data.Code begins at the same fixed address for all processes,
followed by data locations that correspond to global C variables. The code and data areas are initialized directly from the contents of an executable object file. Heap.The code and data areas are followed immediately by the run-time heap. Unlike the code and data areas, which are fixed in size once the process begins running, the heap expands and contracts dynamically at run time as a result of calls to C standard library routines such as malloc and free. Shared libraries.Near the middle of the address space is an area that holds the code and data for shared libraries such as the C standard library and the math library. Stack. At the top of the user’s virtual address space is the user stack that the compiler uses to implement function calls. Like the heap, the user stack expands and contracts dynamically during the execution of the program. In particular, each time we call a function, the stack grows. Each time we return from a function, it contracts. Kernel virtual memory. The kernel is the part of the operating system that is always resident in memory. The top region of the address space is reserved for the kernel. Application programs are not allowed to read or write the contents of this area or to directly call functions defined in the kernel code. цитаты из книги Computer Systems Programmer's Perspective.
0
|
-47 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 204
|
|
03.06.2018, 13:24 [ТС] | 6 |
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
03.06.2018, 13:39 | 7 |
Обычный отдельный участок в адресном пространстве созданного процесса. Информация о том, что и где там будет храниться, определяется на этапе компиляции.
Никаких, за исключением того, что я написал выше.
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 13:49 | 8 |
насколько я помню статические переменные попадают в кэш.
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
03.06.2018, 15:17 | 9 | |||||
Jzx, всё что вы спрашиваете - это специфика архитектуры процессора и оптимизаций компилятора. Как мне кажется, деление на сегменты и распределение в физической памяти не должно стандартизироваться на уровне языка.
Кликните здесь для просмотра всего текста
Под виндой на x86 можно небольшой тест написать и посмотреть как всё это выглядит.
Консольная тестовая программка:
Код
00000000 (0x0 / 0x370000) 0x0 0x1 '???' 00391401 (0x391000 / 0xF000) 0x80 0x20 'code &main' 00391591 (0x391000 / 0xF000) 0x80 0x20 'code &fun2' 00391596 (0x391000 / 0xF000) 0x80 0x20 'code &fun1' 003A0BC4 (0x3A0000 / 0x4000) 0x80 0x2 'const global_const' 003A10D0 (0x3A1000 / 0x3000) 0x80 0x2 'const global_string' 003A40C8 (0x3A4000 / 0x2000) 0x80 0x4 'data global_char[]' 003A4258 (0x3A4000 / 0x2000) 0x80 0x4 'data global_var' 003A4580 (0x3A4000 / 0x2000) 0x80 0x4 'data fun1_static_var' 003A4580 (0x3A4000 / 0x2000) 0x80 0x4 'data fun1_static_var' 003A4584 (0x3A4000 / 0x2000) 0x80 0x4 'data fun2_static_var' 003A4588 (0x3A4000 / 0x2000) 0x80 0x4 'data main_static_var' 0073F900 (0x73F000 / 0x1000) 0x4 0x4 'stack fun1_local_var' 0073F910 (0x73F000 / 0x1000) 0x4 0x4 'stack fun1_argument_var' 0073F9E4 (0x73F000 / 0x1000) 0x4 0x4 'stack fun1_local_var' 0073F9E4 (0x73F000 / 0x1000) 0x4 0x4 'stack fun2_local_var' 0073F9F4 (0x73F000 / 0x1000) 0x4 0x4 'stack fun2_argument_var' 0073F9F4 (0x73F000 / 0x1000) 0x4 0x4 'stack fun1_argument_var' 0073FAEC (0x73F000 / 0x1000) 0x4 0x4 'stack main_local_var' 00B35498 (0xB35000 / 0x9000) 0x4 0x4 'heap new' 00B354D8 (0xB35000 / 0x9000) 0x4 0x4 'heap malloc' 55FFBA20 (0x55FFB000 / 0x10E000) 0x80 0x20 'code &printf'
1
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
03.06.2018, 20:26 | 10 |
В кэш может попасть все из вышеперечисленного. Но к делу это отношения не имеет.
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 20:51 | 11 |
я б не сказал что к делу это не имеет отношения. Ну что ж, если любой тип переменной может туда попасть тогда за каких условий она туда попадает?
0
|
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
03.06.2018, 21:04 | 12 |
А причем здесь переменные? В кэш идет блок-памяти и делается упор на то, что, возможно, следующий за ним блок памяти будет тоже использоваться, посему и заносится в кэш тоже, образуя своего рода кэш-линии
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 21:10 | 13 |
SuperKir, при том что данные хранятся в переменных, разве нет?
0
|
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
03.06.2018, 21:13 | 14 |
IchimaruGin, данные хранятся в памяти.
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 21:18 | 15 |
SuperKir, ну ок подловил с неточностью высказывания. но ведь мы манипулируем данными в исходном коде через переменные. то есть создаем переменную типа double и о чудо в памяти выделено место под эту переменную. так что вопрос всё ещё открыт. или ты хочешь сказать что мы не можем управлять тем попадет блок памяти в кэш или нет.
0
|
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
03.06.2018, 21:21 | 16 |
IchimaruGin, в кэш попадает то, что использовалось + следующие блоки до заполнения кэш-линии
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
03.06.2018, 21:24 | 17 |
Какую переменную процессор прочитал, ту он себе в кэш и кладет. Без участия программиста.
Объявление переменной имеет к кешу примерно такое же отношение, как биржа труда к появлению такси под окном.
0
|
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
|
|
03.06.2018, 21:35 | 18 |
спасибо за ответ(я конечно проверю).и кстати она разве не в регистр записывается?
а то предыдущий столько отмахивался от ответа встречными вопросами что я уже устал спрашивать. возможно и так. для того я и спрашивал за каких условий она попадает в кэш. Добавлено через 3 минуты Не по теме: Renji, у лейтенанта выше рейтинг чем у капитана) кто не понял тот поймёт))
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
03.06.2018, 21:40 | 19 |
Одно другому не мешает. Одна копия в регистр, для работы. Одна копия в кэш, на случай если еще раз по тому же адресу читать будут.
0
|
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
03.06.2018, 21:44 | 20 |
Если это про меня - то я не задал ни 1 вопроса. И конкретно ответил, что попадает
0
|
03.06.2018, 21:44 | |
03.06.2018, 21:44 | |
Помогаю со студенческими работами здесь
20
Статическая и динамическая линковка - в чем преимущество каждой? Статическая память Статическая память и матрицы На каком этапе выделяется статическая память Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |