0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
1

Адресация памяти

21.02.2018, 11:16. Показов 5095. Ответов 18

Добрый день, друзья.

Начав изучать такую замечательную вещь, как программирование, в частности язык C++, столкнулся с необходимостью более глубокого понимания процессов взаимодействия памяти и программы. В поисках драгоценной информации в интернетах наткнулся на картинку которая разрушила мои представления об адресации памяти. Предоставляю ее вам во вложении. По ней выходит, что адресуемая ячейка памяти содержит в себе 8 бит. Хотя я всегда представлял себе, что объем физической ячейки памяти 1 бит. Нашел еще ресурс, на нем обрисовывается адресуемая ячейка памяти в 1 бит. Картинка так же во вложении. Так как именно устроена адресация памяти и какой объем у ячейки памяти? Пожалуйста, разъясните доступно этот момент, буду очень вам благодарен. Внесите ясность в темноту технологического непонимания)
Извините, я только начал во всем этом разбираться и не исключаю, что для знающего человека, я мог спросить на самом деле сверхнелепую глупость, можете меня об этом поругать, мне полезно будет) Но не забудьте при этом все же объяснить этот момент

Ссылочки на сами ресурсы:

https://metanit.com/cpp/tutorial/4.1.php - статья про указатели C++, но там есть момент по данному сабжу.

http://iguania.ru/article/ram
Миниатюры
Адресация памяти   Адресация памяти  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2018, 11:16
Ответы с готовыми решениями:

Сегментная адресация памяти
Здравствуйте, читаю небольшой материал про процессор 8086 и появившийся в нем режим сегментации...

Массивы, адресация, дин. исп памяти
Задача:Заданы два массива А(5) и В(5). Подсчитать в них количество положительных элементов и первым...

Адресация переменных и всей структуры программы на реальной памяти в ОС
Доброго времени суток, Вопрос по памяти, не совсем понятно: 1. Я написал программу 1.cpp,...

Косвенная адресация
Как тут сделать обращение к элементам массива через косвенную адресацию?#include <iostream> /*...

18
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
21.02.2018, 11:20 2
адресуемая яйчейка 1 байт. В структурах можно размещать битовые поля хотя адрес от них не возмешь
1
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 11:25  [ТС] 3
Т.е. человек, написавший вторую статью, сам не до конца разобрался в происходящем и явно вводит в заблуждение, заинтересованых в этой информации, людей?
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
21.02.2018, 11:31 4
Лучший ответ Сообщение было отмечено ZzzCorp как решение

Решение

Объём физической, то бишь аппаратной ячейки памяти действительно 1 бит. Физические ячейки разбиваются на группы по восемь ячеек в каждой. Такая группа называется байтом. Единицей адресации компьютера является байт. То есть, когда я запрашиваю данные с адреса 0x1234567DEAD, я запрашиваю все восемь ячеек байта.

Добавлено через 3 минуты
Вторая статья хорошая. Но вот термин адресуемый там немного неуместен.
1
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 11:38  [ТС] 5
Mirmik, спасибо за развернутый и понятный ответ. Я примерно догадывался о таком положении дел. Т.е. одна адресуемая ячейка памяти по сути логическая?
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
21.02.2018, 11:45 6
Не понял вопроса. Что есть логическая?
0
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 11:48  [ТС] 7
И еще вопрос. Любая оперативная память любого современного компьютера делится таким способом? Всмысле однобайтовыми логическими ячейками. Или есть еще какие нюансы здесь?

Добавлено через 3 минуты
Mirmik, всмысле, есть физические ячейки, как вы сказали по одному биту. Они группируются по восемь ячеек и образуют адресуемые однобайтовые ячейки, я и рискнул предположить, что их в таком случае можно назвать логическими (ну или виртуальными может быть правильнее) эти однобайтовые ячейки.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
21.02.2018, 12:10 8
Немного не так. Современные процессоры сконструированы так, что практически любая операция производится над каким-то набором битов. Операции, в которых процессор работает строго с одним битом крайне редки. Это исключения.

Обычно байт это минимальная порция битов которую может обработать процессор за одну операцию (не считая специальных операций над битами).

То есть, это, вообще говоря, не логическая абстракция. Байт - это минимальная порция данных, с которой работает процессор. Такое понимание байта крайне зыбко. В истории были байты, состоящие от 6 до 48 битов.

Языки программирования вводят свое определение байта. Обычно это или некий тип, который может принимать не мение 256-и разных значений, либо тип, который может кодировать аскишный символ.

Короче не берите в голову... Дать определение байту очень сложно, потому что байт в отличии от бита не академичен.

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

Потому что, еще раз... Байты удобны. Но не более... Ничего фундаментального в них нет. Это инженерная абстракция, которую каждый трактует на свой лад.

Добавлено через 6 минут
Вероятно, ближе всего к истине будет такое определение.
Байт - минимальный объём информации, под работу с которым оптимизирована та или иная информационная система.
1
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 12:17  [ТС] 9
Mirmik, спасибо, понял. Главное разобрался. Буду дальше постигать техногенный океан)
0
Kastaneda
21.02.2018, 12:38
  #10

Не по теме:

Цитата Сообщение от 1Вирт1 Посмотреть сообщение
адресуемая яйчейка 1 бай
В Borland C++ Builder можно биты адресовывать :p

0
3504 / 2126 / 395
Регистрация: 09.09.2017
Сообщений: 8,835
21.02.2018, 12:42 11
Странно что никто не сказал о том, что объем информации, который процессор обрабатывает за одну операцию называется машинным словом. А размер этого слова и задает разрядность машины, 8-битные, 16-битные, 32-битные, 64-битные. А байт это лишь абстракция вокруг машинного слова. Наиболее распространен 8-битный байт, даже на 64-разрядных машинах. Но это особенности, в которые по началу можно не лезть - компилятор сам разберется как ему удобнее.
Пока же можно представлять память как линейную последовательность байтов. Вы можете обращаться к любому из них (если не запрещено операционкой, конечно), но не можете непосредственно к битам. Чтобы обратиться к конкретному биту, придется считать весь байт, поменять в нем бит и записать обратно.
1
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 15:08  [ТС] 12
Kastaneda, ну началось) только картина мира в голове более менее устоялась)

Добавлено через 1 минуту
COKPOWEHEU, интересная и полезная информация про машинное слово, но каким образом она решает вопрос темы, мой друг?
0
Kastaneda
21.02.2018, 15:10
  #13

Не по теме:

Цитата Сообщение от ZzzCorp Посмотреть сообщение
ну началось)
это был местный юмор "для тех, кто в теме", не обращай внимания :)

0
3504 / 2126 / 395
Регистрация: 09.09.2017
Сообщений: 8,835
21.02.2018, 15:56 14
ZzzCorp, скорее уточнение предыдущих ответов.
Цитата Сообщение от ZzzCorp Посмотреть сообщение
Kastaneda, ну началось) только картина мира в голове более менее устоялась)
Если это можно _только_ в CBuilder'е то считаем нестандартным расширением и игнорируем. Нестандартных расширений много, и зачем терять совместимость со всеми остальными компиляторами ради них
P.S. Недавно прочитал про особенность SSD памяти, там говорят что один транзистор хранит 3 бита информации, такая вот интересная ячейка. Но на нашем, программерском уровне, считаем что ячейка это 1 байт (обычно 8 бит) и расположены они друг за другом, линейно.
0
Croessmah
21.02.2018, 16:02
  #15

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Нестандартных расширений много, и зачем терять совместимость со всеми остальными компиляторами ради них
Ну так Builder ради Builder'a же :)

0
COKPOWEHEU
21.02.2018, 16:17
  #16

Не по теме:

Croessmah, Ну так не "ТС ради Билдера" же!

0
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 48
21.02.2018, 18:37  [ТС] 17
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Недавно прочитал про особенность SSD памяти, там говорят что один транзистор хранит 3 бита информации
Похоже там ячейка все же не транзистор (вообще правильнее триггер), а регистр. Ибо как транзистор может три состояния сразу держать? Он же либо закрыт, либо открыт. Только одно состояние, только один бит
0
3504 / 2126 / 395
Регистрация: 09.09.2017
Сообщений: 8,835
21.02.2018, 19:41 18
ZzzCorp, транзистор может работать не только в ключевом режиме. Ну и особенность вообще любой флеш-памяти в хитром устройстве транзистора: между каналом и затвором расположен либо еще один, плавающий, затвор, либо сам подзатворный диэлектрик может захватывать электроны. В результате после занесения туда заряда он не рассасывается десятилетиями. А от заряда зависит проводимость транзистора, аналоговая величина, вообще-то. Так что количество записанных битов зависит от времени релаксации (для flash это десятки лет, для DRAM - доли секунды), помехоустойчивости и точности распознавания.
В "обычной" флеш-памяти ячейкой служит именно одиночный транзистор, как и в динамической ОЗУ (DRAM). А вот в статической ОЗУ (SRAM) действительно триггер.
Вообще-то, форум не лучшее место объяснять подобное.
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
21.02.2018, 20:42 19
IBM представляет первую в мире память PCM с записью трёх битов в ячейку
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2018, 20:42
Помогаю со студенческими работами здесь

Ip адресация подсетей
В вашем распоряжении сеть класса А. Необходимо организовать 60 подсетей, причем в следующие два...

Адресация методом Айлиффа
Необходимо создать адресацию в 4-х мерном массиве(base) методом Aйлиффа. Вот чето не фурычит,...

Косвенная адресация объектов
Здравствуйте есть необходимость собрать адреса созданных объектов в массив количество их известно...

Как происходит адресация #include?
Допустим есть 4 файла: Файл sum.cpp который хранится к примеру в папке D:\source1; int sum(int x,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru