0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
1 | |
Низкоуровневые тонкости программирования на С++22.10.2012, 22:04. Показов 5338. Ответов 23
Метки нет (Все метки)
Здравствуйте. Хотел бы узнать у опытных программистов, где можно найти литературу по более продвинутым вопросам программирования с С++, т.е. таких как, выделение памяти при создании экземпляров класса, доступ к методам класса, скрытое (от разработчика) создание временных переменных в процессе выполнения, хранение в памяти динамических массивов и осуществление доступа к их ячейкам (если массив хранится в виде нескольких кусков, например) и т.п. То есть по более "низкоуровневым вопросам", связанным с работой компиляторов, менеджеров памяти и др., которые не освещены в большинстве книг по С++.
ПС. Я просто не знаю как лучше (обобщенно) назвать такого рода вопросы, чем "низкоуровневые вопросы"
0
|
22.10.2012, 22:04 | |
Ответы с готовыми решениями:
23
Какие книги стоит прочитать начинающему программисту С++ , чтобы понять все тонкости программирования? Низкоуровневые функции С++ Низкоуровневые функции работы с файлами Низкоуровневые средства ввода вывода в UNIX |
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
|
|
22.10.2012, 22:27 | 2 |
Конкретно такой литературы не встречал.
Подобные вопросы часто встречаются в разных книгах безсистемно. Например, много таких тонкостей описано в книгах "Сложные задачи на С++" и "Новые сложные задачи на С++" Саттера. У Александреску в книге про проектирование на С++ есть раздел про выделение памяти для маленьких объектов. Ну и много где ещё по мелочи. Мне думается, специальной такой литературы не найти. Низкоуровневые тонкости на то и низкоуровневые, чтобы зависеть от компиляторов и платформ, а потому сложно систематизируемые.
1
|
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
22.10.2012, 22:43 [ТС] | 3 |
Даже это было бы неплохо, скажем на русском языке.
Но даже на английском, на странице документации эмборкадеро С++ не могу найти то, что нужно в моем случае. Невозможно, чтобы такие тонкости у них не документировались! Или я неправильно ищу?
0
|
Неэпический
|
|
22.10.2012, 23:17 | 4 |
Ну это, как мне кажется, есть почти в любой книге.
Почитайте, может понравится: Стив Макконнелл - Совершенный код. Мастер-класс
1
|
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
23.10.2012, 12:55 [ТС] | 5 |
Нет, вы неправильно поняли, я говорю не про MyClass->Field и Array[Index]
Я про низкоуровневую реализацию и механизмы. И речь идет не про эти КОНКРЕТНЫЕ вопросы, я привел их в пример, чтобы объяснить, что я имею в виду когда говорю "низкоуровневая реализация и механизмы". Я читал парочку глав оттуда. Это книга советов программисту, типа "Не возжелай исходников ближнего своего", "Повысь духовный уровень своего кода" итд. К моему вопросу не имеет отношения, одним словом.
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
23.10.2012, 17:08 | 6 |
Если я правильно понимаю ваш вопрос, вам нужна литература по ассемблеру и устройству(и принципам работы) операционных систем.
1
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
23.10.2012, 17:12 | 7 |
KernelSource, как плюсовые код представлен на низком уровне, хорошо написано в книге К. Касперски "искусство дизассемблирования". Он дает примеры кода, а потом описывает, что получается после компиляции.
2
|
OhMyGodSoLong
|
23.10.2012, 17:20
#8
|
2
|
23.10.2012, 17:47 | 9 |
Изучаешь ассемблер, потом компилируешь сишный код и смотришь, что реально получается. Даже если ты найдешь книгу, с ответами на твои вопросы, то без знания ассемблера все равно глубокого понимания не будет. Например ты будешь знать, что где-то там есть какой-то там стек, и что память под переменные выделяется простым изменением указателя на верхушку стеку. Но толку от таких знаний не много.
Добавлено через 1 минуту Я бы еще сюда добавил режимы работы процессора.
1
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
23.10.2012, 17:48 | 10 |
Тоже рекомендую. Только это вообще не про С++.
Любая книга выше уровня "чайника". Рекомендую Александреску почитать. Там хоть и про шаблоны, но выделение памяти для экземпляров рассмотрено четырьмя способами, кажется. Опять же Александреску + Рихтер. Но в основном это только для виртуальных методов смысл есть, иначе можно обойтись указателями на методы. Почти любая книжка. Учитывая, что оптимизирующий компилятор может обходиться без временных объектов даже тогда, когда ты их сам создаёшь, то можно просто забить и забыть. Достаточно реализовать ккорректные конструктор копирования и оператор присваивания. Любая книжка для чайников. Ответ содержится в вопросе: массив - непрерывный участок памяти. А это уже не массив, т.к. невозможно обеспечить доступ за время О(1). А реализовать контейнер с индексированным доступом, без константного времени доступа к элементам задача тривиальная. Они не освещены, потому что их реализация не стандартизована и каждый разработчик компилятора делает их по своему усмотрению. То же касается ОС. Для основных сведений читай Рихтера.
1
|
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
23.10.2012, 19:04 [ТС] | 11 |
Не смог промолчать. Нет Deviaphan, ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
А в документации к конкретному компилятору их тоже нет? Скажем к билдеру или MS C++? Ну слава богу, про сущ-е стека вызовов я в курсе, но знаю асм не на таком уровне чтобы
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
23.10.2012, 19:28 | 14 |
Нет, ну полуправдой этот ответ можно считать. Если под "физически" понимать действительно физически. На планке памяти, а не с точки зрения виртуальной памяти. Но тогда, вообще-то говоря, любые массивы не обязательно непрерывны.
Документация, которая покрывает такие аспекты работы, не нужна 99,999% пользователей. Она нужна разработчикам и мейнтейнерам компилятора, так что и искать её надо в исходниках и во внутренней документации. Не думаю, что MS и кто там сейчас владеет Билдером будут её выставлять в публичный доступ. Уровень вхождения, естественно, там невероятно высокий.
0
|
Kastaneda
|
23.10.2012, 19:45
#15
|
0
|
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
23.10.2012, 19:50 [ТС] | 16 |
Я бы рад, но ассемблер хромает. Да и что то подсказывает, что в данном случае это не самый рациональный путь.
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель. двумерный ДМ вообще является одномерным массивом указателей на одномерные динамические массивы. т.е Arr[3][4] не лежит рядом с Arr[3][5], рядом лежат только указатели на "подмассивы" и то не факт что лежат
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
23.10.2012, 19:53 | 17 |
ЛОЛ ШТО? Это динамически выделенный НЕПРЕРЫВНЫЙ участок памяти. Слово массив не может интерпретироваться никак иначе по определению.
0
|
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
|
|
23.10.2012, 20:03 [ТС] | 18 |
перевод Addressing pointers. Автор: Rudy Velthuis:
http://www.transl-gunsmoker.ru... references Да и в конце концов, невозможно гарантированно динамически выделить непрерывный участок памяти, чтобы его можно было бы увеличивать несколько раза сто и он оставался бы непрерывным.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
23.10.2012, 20:13 | 19 |
Массив обязан быть непрерывным. Я так понимаю, ты имел в виду массив динамически изменяемого размера, а не просто массив в динамической памяти. Но это ничего не меняет. Можешь посмотреть реализацию std::vector, это и есть массив изменяемого размера. Ты можешь сделать контейнер с индексированным доступом, который будет состоять из нескольких участков памяти, но это уже не будет массив.
Добавлено через 2 минуты "Динамический массив - это блок выделенной памяти" А блок выделенной памяти всегда непрерывен.
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
23.10.2012, 20:22 | 20 |
1
|
23.10.2012, 20:22 | |
23.10.2012, 20:22 | |
Помогаю со студенческими работами здесь
20
Низкоуровневые сокеты. Udp клиент-сервер Саааамые низкоуровневые библиотеки для доступа к ОС На чем писались низкоуровневые функции winapi Низкоуровневые сокеты (ICMP протокол), Ошибка с типами, Клиент-Сервер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |