Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
KernelSource
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
#1

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

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

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

ПС. Я просто не знаю как лучше (обобщенно) назвать такого рода вопросы, чем "низкоуровневые вопросы"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 22:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Низкоуровневые тонкости программирования на С++ (C++):

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

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

Тонкости быстрой сортировки - C++
Излазил кучу мест в сети. Нашел массу этих алгоритмов, но на поверку практически каждый не совсем работающий. Представляется, что в этой...

Тонкости типов данных - C++
Господа, подскажите, пожалуйста, в чем моя ошибка, не вижу, хоть убейся. Программа простейшая, но результат выдается в конце один и тот же,...

Тонкости работы ползунков - C++
Я обрабатываю следующие сообщения: if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK || nSBCode == SB_PAGERIGHT || nSBCode...

Объясните некоторые тонкости указателей - C++
Всем добрый вечер. Вот так выглядит сам код: //Программа объявляет указатель на массив типа double, затем выделяет память, заполняет и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,043
Завершенные тесты: 3
22.10.2012, 22:27 #2
Конкретно такой литературы не встречал.
Подобные вопросы часто встречаются в разных книгах безсистемно. Например, много таких тонкостей описано в книгах "Сложные задачи на С++" и "Новые сложные задачи на С++" Саттера. У Александреску в книге про проектирование на С++ есть раздел про выделение памяти для маленьких объектов. Ну и много где ещё по мелочи.
Мне думается, специальной такой литературы не найти. Низкоуровневые тонкости на то и низкоуровневые, чтобы зависеть от компиляторов и платформ, а потому сложно систематизируемые.
KernelSource
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
22.10.2012, 22:43  [ТС] #3
Цитата Сообщение от John Prick Посмотреть сообщение
зависеть от компиляторов и платформ
Даже это было бы неплохо, скажем на русском языке.
Но даже на английском, на странице документации эмборкадеро С++ не могу найти то, что нужно в моем случае. Невозможно, чтобы такие тонкости у них не документировались! Или я неправильно ищу?
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
22.10.2012, 23:17 #4
Цитата Сообщение от KernelSource Посмотреть сообщение
выделение памяти при создании экземпляров класса, доступ к методам класса, хранение в памяти динамических массивов и осуществление доступа к их ячейкам
Ну это, как мне кажется, есть почти в любой книге.
Цитата Сообщение от KernelSource Посмотреть сообщение
где можно найти литературу по более продвинутым вопросам программирования с С++
Почитайте, может понравится:
Стив Макконнелл - Совершенный код. Мастер-класс
KernelSource
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 12:55  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от KernelSource
выделение памяти при создании экземпляров класса, доступ к методам класса, хранение в памяти динамических массивов и осуществление доступа к их ячейкам
Ну это, как мне кажется, есть почти в любой книге.
Нет, вы неправильно поняли, я говорю не про MyClass->Field и Array[Index]
Я про низкоуровневую реализацию и механизмы. И речь идет не про эти КОНКРЕТНЫЕ вопросы, я привел их в пример, чтобы объяснить, что я имею в виду когда говорю "низкоуровневая реализация и механизмы".

Цитата Сообщение от Croessmah Посмотреть сообщение
Почитайте, может понравится:
Стив Макконнелл - Совершенный код. Мастер-класс
Я читал парочку глав оттуда. Это книга советов программисту, типа "Не возжелай исходников ближнего своего", "Повысь духовный уровень своего кода" итд. К моему вопросу не имеет отношения, одним словом.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
23.10.2012, 17:08 #6
Если я правильно понимаю ваш вопрос, вам нужна литература по ассемблеру и устройству(и принципам работы) операционных систем.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.10.2012, 17:12 #7
KernelSource, как плюсовые код представлен на низком уровне, хорошо написано в книге К. Касперски "искусство дизассемблирования". Он дает примеры кода, а потом описывает, что получается после компиляции.
OhMyGodSoLong
23.10.2012, 17:20
  #8

Не по теме:

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

Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 17:47 #9
Изучаешь ассемблер, потом компилируешь сишный код и смотришь, что реально получается. Даже если ты найдешь книгу, с ответами на твои вопросы, то без знания ассемблера все равно глубокого понимания не будет. Например ты будешь знать, что где-то там есть какой-то там стек, и что память под переменные выделяется простым изменением указателя на верхушку стеку. Но толку от таких знаний не много.

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

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


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


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


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


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


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

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

Цитата Сообщение от Kastaneda Посмотреть сообщение
Например ты будешь знать, что где-то там есть какой-то там стек, и что память под переменные выделяется простым изменением указателя на верхушку стеку.
Ну слава богу, про сущ-е стека вызовов я в курсе, но знаю асм не на таком уровне чтобы
Цитата Сообщение от Kastaneda Посмотреть сообщение
потом компилируешь сишный код и смотришь, что реально получается
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.10.2012, 19:05 #12
KernelSource, странный ты. Как ты хочешь разбираться в коде, если не хочешь смотреть ассемблерный листинг того, что сделал компилятор?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 19:18 #13
Цитата Сообщение от KernelSource Посмотреть сообщение
ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
А что?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 19:28 #14
Цитата Сообщение от Kastaneda Посмотреть сообщение
Цитата Сообщение от KernelSource Посмотреть сообщение
Не смог промолчать. Нет Deviaphan, ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
А что?
Нет, ну полуправдой этот ответ можно считать. Если под "физически" понимать действительно физически. На планке памяти, а не с точки зрения виртуальной памяти. Но тогда, вообще-то говоря, любые массивы не обязательно непрерывны.

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

Уровень вхождения, естественно, там невероятно высокий.
Kastaneda
23.10.2012, 19:45     Низкоуровневые тонкости программирования на С++
  #15

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 19:45
Привет! Вот еще темы с ответами:

Прошу пояснить тонкости данного кода - C++
#include <math.h> <...> class CAccumulator { private: float value; static int lastId; int myId; public: CAccumulator( const...

Как называется движение программирования или теория программы считывающая др. язык программирования - C++
Не знал, как по другому задать вопрос, и также назвать тему, но буду краток: Допустим я хочу создать программу, которая будет...

Нюансы синтаксиса и тонкости использования указателей и массивов - C++
Доброго времени суток! Никак не могу понять, почему один вариант кода работает: #include <iostream> #include <stdlib.h> ...

Тонкости кода: wchar_t* FilterFiles = L"cool"; - C++
Я в функции создаю указатель на строку и потом этот указатель передаю в объект (поле объекта): wchar_t* FilterFiles = L"cool"; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2012, 19:45
Ответ Создать тему
Опции темы

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