Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
1

Низкоуровневые тонкости программирования на С++

22.10.2012, 22:04. Показов 4145. Ответов 23
Метки нет (Все метки)

Здравствуйте. Хотел бы узнать у опытных программистов, где можно найти литературу по более продвинутым вопросам программирования с С++, т.е. таких как, выделение памяти при создании экземпляров класса, доступ к методам класса, скрытое (от разработчика) создание временных переменных в процессе выполнения, хранение в памяти динамических массивов и осуществление доступа к их ячейкам (если массив хранится в виде нескольких кусков, например) и т.п. То есть по более "низкоуровневым вопросам", связанным с работой компиляторов, менеджеров памяти и др., которые не освещены в большинстве книг по С++.

ПС. Я просто не знаю как лучше (обобщенно) назвать такого рода вопросы, чем "низкоуровневые вопросы"
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2012, 22:04
Ответы с готовыми решениями:

Какие книги стоит прочитать начинающему программисту С++ , чтобы понять все тонкости программирования?
Чтобы узнать основные принципы всех парадигм программирования, чего стоит и не стоит делать, да и...

Низкоуровневые функции С++
Здраствуйте. Внизу код, который выполняет такую задачу: С использованием автосборщика make...

Низкоуровневые функции работы с файлами
Добрый день. Подскажите, пожалуйста, какие есть низкоуровневые функции работы с файлами? спасибо

Низкоуровневые средства ввода вывода в UNIX
Здравствуйте!!! Помогите пожалуйста!! Вот задание. Описать функцию, удваивающую в заданном файле...

23
846 / 777 / 258
Регистрация: 27.07.2012
Сообщений: 2,182
22.10.2012, 22:27 2
Конкретно такой литературы не встречал.
Подобные вопросы часто встречаются в разных книгах безсистемно. Например, много таких тонкостей описано в книгах "Сложные задачи на С++" и "Новые сложные задачи на С++" Саттера. У Александреску в книге про проектирование на С++ есть раздел про выделение памяти для маленьких объектов. Ну и много где ещё по мелочи.
Мне думается, специальной такой литературы не найти. Низкоуровневые тонкости на то и низкоуровневые, чтобы зависеть от компиляторов и платформ, а потому сложно систематизируемые.
1
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
22.10.2012, 22:43  [ТС] 3
Цитата Сообщение от John Prick Посмотреть сообщение
зависеть от компиляторов и платформ
Даже это было бы неплохо, скажем на русском языке.
Но даже на английском, на странице документации эмборкадеро С++ не могу найти то, что нужно в моем случае. Невозможно, чтобы такие тонкости у них не документировались! Или я неправильно ищу?
0
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
22.10.2012, 23:17 4
Цитата Сообщение от KernelSource Посмотреть сообщение
выделение памяти при создании экземпляров класса, доступ к методам класса, хранение в памяти динамических массивов и осуществление доступа к их ячейкам
Ну это, как мне кажется, есть почти в любой книге.
Цитата Сообщение от KernelSource Посмотреть сообщение
где можно найти литературу по более продвинутым вопросам программирования с С++
Почитайте, может понравится:
Стив Макконнелл - Совершенный код. Мастер-класс
1
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 12:55  [ТС] 5
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от KernelSource
выделение памяти при создании экземпляров класса, доступ к методам класса, хранение в памяти динамических массивов и осуществление доступа к их ячейкам
Ну это, как мне кажется, есть почти в любой книге.
Нет, вы неправильно поняли, я говорю не про MyClass->Field и Array[Index]
Я про низкоуровневую реализацию и механизмы. И речь идет не про эти КОНКРЕТНЫЕ вопросы, я привел их в пример, чтобы объяснить, что я имею в виду когда говорю "низкоуровневая реализация и механизмы".

Цитата Сообщение от Croessmah Посмотреть сообщение
Почитайте, может понравится:
Стив Макконнелл - Совершенный код. Мастер-класс
Я читал парочку глав оттуда. Это книга советов программисту, типа "Не возжелай исходников ближнего своего", "Повысь духовный уровень своего кода" итд. К моему вопросу не имеет отношения, одним словом.
0
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
23.10.2012, 17:08 6
Если я правильно понимаю ваш вопрос, вам нужна литература по ассемблеру и устройству(и принципам работы) операционных систем.
1
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.10.2012, 17:12 7
KernelSource, как плюсовые код представлен на низком уровне, хорошо написано в книге К. Касперски "искусство дизассемблирования". Он дает примеры кода, а потом описывает, что получается после компиляции.
2
OhMyGodSoLong
23.10.2012, 17:20
  #8

Не по теме:

Цитата Сообщение от KernelSource Посмотреть сообщение
Я про низкоуровневую реализацию и механизмы. И речь идет не про эти КОНКРЕТНЫЕ вопросы, я привел их в пример, чтобы объяснить, что я имею в виду когда говорю "низкоуровневая реализация и механизмы"
Я б тоже хотел книгу «Аннотированные исходные коды компилятора gcc 4.7.2 (в сорока трёх томах)»...

2
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,970
Записей в блоге: 2
23.10.2012, 17:47 9
Изучаешь ассемблер, потом компилируешь сишный код и смотришь, что реально получается. Даже если ты найдешь книгу, с ответами на твои вопросы, то без знания ассемблера все равно глубокого понимания не будет. Например ты будешь знать, что где-то там есть какой-то там стек, и что память под переменные выделяется простым изменением указателя на верхушку стеку. Но толку от таких знаний не много.

Добавлено через 1 минуту
Цитата Сообщение от rangerx Посмотреть сообщение
Если я правильно понимаю ваш вопрос, вам нужна литература по ассемблеру и устройству(и принципам работы) операционных систем.
Я бы еще сюда добавил режимы работы процессора.
1
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.10.2012, 17:48 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Стив Макконнелл - Совершенный код. Мастер-класс
Тоже рекомендую. Только это вообще не про С++.

Цитата Сообщение от KernelSource Посмотреть сообщение
выделение памяти при создании экземпляров класса
Любая книга выше уровня "чайника". Рекомендую Александреску почитать. Там хоть и про шаблоны, но выделение памяти для экземпляров рассмотрено четырьмя способами, кажется.


Цитата Сообщение от KernelSource Посмотреть сообщение
доступ к методам класса
Опять же Александреску + Рихтер. Но в основном это только для виртуальных методов смысл есть, иначе можно обойтись указателями на методы.


Цитата Сообщение от KernelSource Посмотреть сообщение
скрытое (от разработчика) создание временных переменных в процессе выполнения
Почти любая книжка. Учитывая, что оптимизирующий компилятор может обходиться без временных объектов даже тогда, когда ты их сам создаёшь, то можно просто забить и забыть. Достаточно реализовать ккорректные конструктор копирования и оператор присваивания.


Цитата Сообщение от KernelSource Посмотреть сообщение
хранение в памяти динамических массивов
Любая книжка для чайников. Ответ содержится в вопросе: массив - непрерывный участок памяти.


Цитата Сообщение от KernelSource Посмотреть сообщение
существление доступа к их ячейкам (если массив хранится в виде нескольких кусков, например)
А это уже не массив, т.к. невозможно обеспечить доступ за время О(1). А реализовать контейнер с индексированным доступом, без константного времени доступа к элементам задача тривиальная.


Цитата Сообщение от KernelSource Посмотреть сообщение
связанным с работой компиляторов, менеджеров памяти и др., которые не освещены в большинстве книг по С++
Они не освещены, потому что их реализация не стандартизована и каждый разработчик компилятора делает их по своему усмотрению. То же касается ОС. Для основных сведений читай Рихтера.
1
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 19:04  [ТС] 11
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ответ содержится в вопросе: массив - непрерывный участок памяти.
Не смог промолчать. Нет Deviaphan, ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Они не освещены, потому что их реализация не стандартизована и каждый разработчик компилятора делает их по своему усмотрению.
А в документации к конкретному компилятору их тоже нет? Скажем к билдеру или MS C++?

Цитата Сообщение от Kastaneda Посмотреть сообщение
Например ты будешь знать, что где-то там есть какой-то там стек, и что память под переменные выделяется простым изменением указателя на верхушку стеку.
Ну слава богу, про сущ-е стека вызовов я в курсе, но знаю асм не на таком уровне чтобы
Цитата Сообщение от Kastaneda Посмотреть сообщение
потом компилируешь сишный код и смотришь, что реально получается
0
Почетный модератор
7385 / 2629 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.10.2012, 19:05 12
KernelSource, странный ты. Как ты хочешь разбираться в коде, если не хочешь смотреть ассемблерный листинг того, что сделал компилятор?
0
Jesus loves me
Эксперт С++
5189 / 3157 / 355
Регистрация: 12.12.2009
Сообщений: 7,970
Записей в блоге: 2
23.10.2012, 19:18 13
Цитата Сообщение от KernelSource Посмотреть сообщение
ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
А что?
0
~ Эврика! ~
1254 / 1003 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 19:28 14
Цитата Сообщение от Kastaneda Посмотреть сообщение
Цитата Сообщение от KernelSource Посмотреть сообщение
Не смог промолчать. Нет Deviaphan, ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
А что?
Нет, ну полуправдой этот ответ можно считать. Если под "физически" понимать действительно физически. На планке памяти, а не с точки зрения виртуальной памяти. Но тогда, вообще-то говоря, любые массивы не обязательно непрерывны.

Цитата Сообщение от KernelSource Посмотреть сообщение
А в документации к конкретному компилятору их тоже нет? Скажем к билдеру или MS C++?
Документация, которая покрывает такие аспекты работы, не нужна 99,999% пользователей. Она нужна разработчикам и мейнтейнерам компилятора, так что и искать её надо в исходниках и во внутренней документации. Не думаю, что MS и кто там сейчас владеет Билдером будут её выставлять в публичный доступ.

Уровень вхождения, естественно, там невероятно высокий.
0
Kastaneda
23.10.2012, 19:45
  #15

Не по теме:

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Если под "физически" понимать действительно физически. На планке памяти, а не с точки зрения виртуальной памяти. Но тогда, вообще-то говоря, любые массивы не обязательно непрерывны.
Если процессор не работает в real mode.

0
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 19:50  [ТС] 16
Цитата Сообщение от Vourhey Посмотреть сообщение
KernelSource, странный ты. Как ты хочешь разбираться в коде, если не хочешь смотреть ассемблерный листинг того, что сделал компилятор?
Я бы рад, но ассемблер хромает. Да и что то подсказывает, что в данном случае это не самый рациональный путь.



Цитата Сообщение от Kastaneda Посмотреть сообщение
А что?
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель. двумерный ДМ вообще является одномерным массивом указателей на одномерные динамические массивы. т.е Arr[3][4] не лежит рядом с Arr[3][5], рядом лежат только указатели на "подмассивы" и то не факт что лежат
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.10.2012, 19:53 17
Цитата Сообщение от KernelSource Посмотреть сообщение
ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
ЛОЛ ШТО? Это динамически выделенный НЕПРЕРЫВНЫЙ участок памяти. Слово массив не может интерпретироваться никак иначе по определению.
0
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 20:03  [ТС] 18
Цитата Сообщение от Deviaphan Посмотреть сообщение
ЛОЛ ШТО? Это динамически выделенный НЕПРЕРЫВНЫЙ участок памяти. Слово массив не может интерпретироваться никак иначе по определению.
перевод Addressing pointers. Автор: Rudy Velthuis:
http://www.transl-gunsmoker.ru... references

Да и в конце концов, невозможно гарантированно динамически выделить непрерывный участок памяти, чтобы его можно было бы увеличивать несколько раза сто и он оставался бы непрерывным.
0
Делаю внезапно и красиво
Эксперт С++
1311 / 1226 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.10.2012, 20:13 19
Цитата Сообщение от KernelSource Посмотреть сообщение
чтобы его можно было бы увеличивать несколько раза сто и он оставался бы непрерывным
Массив обязан быть непрерывным. Я так понимаю, ты имел в виду массив динамически изменяемого размера, а не просто массив в динамической памяти. Но это ничего не меняет. Можешь посмотреть реализацию std::vector, это и есть массив изменяемого размера. Ты можешь сделать контейнер с индексированным доступом, который будет состоять из нескольких участков памяти, но это уже не будет массив.

Добавлено через 2 минуты
Цитата Сообщение от KernelSource Посмотреть сообщение
перевод
"Динамический массив - это блок выделенной памяти" А блок выделенной памяти всегда непрерывен.
0
572 / 555 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
23.10.2012, 20:22 20
Цитата Сообщение от KernelSource Посмотреть сообщение
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель.
Где так написано?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2012, 20:22

Низкоуровневые сокеты. Udp клиент-сервер
Здравствуйте.Помогите пожалуйста поправить код сервера,принимающего сообщение от клиента и...

Саааамые низкоуровневые библиотеки для доступа к ОС
Если мне нужен сааааамый низкий доступ к системе, к каким инструментам я должен прибегнуть?(и есть...

На чем писались низкоуровневые функции winapi
Жажду знаний, как оно все делается на супернизком уровне. На чем писали винапи? На ассемблере?

Низкоуровневые сокеты (ICMP протокол), Ошибка с типами, Клиент-Сервер
Создать для клиента генератор пакетов (для проведения атаки ICMP-Flood), а для сокета-сервера...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.