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

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

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

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

22.10.2012, 22:04. Просмотров 1813. Ответов 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, затем выделяет память, заполняет и...

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



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

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

Добавлено через 2 минуты
Цитата Сообщение от KernelSource Посмотреть сообщение
перевод
"Динамический массив - это блок выделенной памяти" А блок выделенной памяти всегда непрерывен.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
23.10.2012, 20:22 #20
Цитата Сообщение от KernelSource Посмотреть сообщение
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель.
Где так написано?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 20:23 #21
Цитата Сообщение от KernelSource Посмотреть сообщение
По нему не пробежишься, инкрементируя указатель
В С++ как раз пробежишься. Там по ссылке речь про делфи (которого я не знаю), но если там так, как ты говоришь, значит там массив - это что-то типа класса, а в С++ массив это просто кусок памяти от А до В.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
23.10.2012, 20:26 #22
Цитата Сообщение от KernelSource Посмотреть сообщение
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных,
Цитата Сообщение от KernelSource Посмотреть сообщение
Я бы рад, но ассемблер хромает.
У Вас не только ассемблер хромает.

Добавлено через 1 минуту
Kastaneda, да нет, быстро глянул, там тоже самое, даже процитирую:
До Delphi 4 в языке не было динамических массивов, но они существовали как концепция. Динамический массив - это блок выделенной памяти, которая управляется через указатель. Динамические массивы могут расти или уменьшаться. Фактически это означает, что выделяется новый блок памяти для массива новой длины, в то время как старая память ещё не отпускается. После чего содержимое старой памяти копируется в новую, и старый блок памяти в конце удаляется, а указатель (ссылка) массива начинает указывать на новый блок памяти.
KernelSource
0 / 0 / 0
Регистрация: 09.02.2012
Сообщений: 19
23.10.2012, 20:58  [ТС] #23
Цитата Сообщение от Toshkarik Посмотреть сообщение
Kastaneda, да нет, быстро глянул, там тоже самое, даже процитирую:
До Delphi 4 в языке не было динамических массивов, но они существовали как концепция. Динамический массив - это блок выделенной памяти, которая управляется через указатель. Динамические массивы могут расти или уменьшаться. Фактически это означает, что выделяется новый блок памяти для массива новой длины, в то время как старая память ещё не отпускается. После чего содержимое старой памяти копируется в новую, и старый блок памяти в конце удаляется, а указатель (ссылка) массива начинает указывать на новый блок памяти.
Там же:
Но динамические массивы также могут быть и многомерными. Ну, по-крайней мере, с точки зрения синтаксиса, т.к. в действительности они ими не являются. Многомерный динамический массив является, фактически, одномерным динамическим массивом, в котором каждый элемент является ссылкой на другой одномерный динамический массив.

А на счет одномерных динамических массивов (в дельфи) я кажется ступил. Я реально считал что в они могут быть в о фрагментированном виде(физически, в выделенной памяти) и доступ по инкременту указателя(как в случае со статическими массивами) для них невозможен. не могу найти где я это прочитал (недавно).

Цитата Сообщение от Toshkarik Посмотреть сообщение
У Вас не только ассемблер хромает.
судя по всему...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.10.2012, 06:08 #24
Цитата Сообщение от KernelSource Посмотреть сообщение
т.к. в действительности они ими не являются
Пространство оперативной памяти - одномерно. Поэтому реально многомерных массивов (в геометрическом смысле) в ней быть не может. Кроме того, нормальные люди не в состоянии геометрически представить пространства, числом более трёх.

Цитата Сообщение от KernelSource Посмотреть сообщение
в котором каждый элемент является ссылкой на другой одномерный динамический массив.
Указателем, а не ссылкой. В остальном всё верно. Создание таких массивов рассматривается в любой книжке для чайников, т.к. это базовый уровень знаний языка программирования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 06:08
Привет! Вот еще темы с ответами:

Прошу пояснить тонкости данного кода - 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
Объявления
24.10.2012, 06:08
Ответ Создать тему
Опции темы

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