Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

ПС. Я просто не знаю как лучше (обобщенно) назвать такого рода вопросы, чем "низкоуровневые вопросы"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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, затем выделяет память, заполняет и...

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



Цитата Сообщение от Kastaneda Посмотреть сообщение
А что?
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель. двумерный ДМ вообще является одномерным массивом указателей на одномерные динамические массивы. т.е Arr[3][4] не лежит рядом с Arr[3][5], рядом лежат только указатели на "подмассивы" и то не факт что лежат
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.10.2012, 19:53 #17
Цитата Сообщение от KernelSource Посмотреть сообщение
ДИНАМИЧЕСКИЙ массив это не непрерывный(физически) участок памяти.
ЛОЛ ШТО? Это динамически выделенный НЕПРЕРЫВНЫЙ участок памяти. Слово массив не может интерпретироваться никак иначе по определению.
0
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/09/blog-post.html#references

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

Добавлено через 2 минуты
Цитата Сообщение от KernelSource Посмотреть сообщение
перевод
"Динамический массив - это блок выделенной памяти" А блок выделенной памяти всегда непрерывен.
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
23.10.2012, 20:22 #20
Цитата Сообщение от KernelSource Посмотреть сообщение
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных, он может состоять из нескольких блоков различной длины, лежащих в разных уголках памяти. По нему не пробежишься, инкрементируя указатель.
Где так написано?
1
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 20:23 #21
Цитата Сообщение от KernelSource Посмотреть сообщение
По нему не пробежишься, инкрементируя указатель
В С++ как раз пробежишься. Там по ссылке речь про делфи (которого я не знаю), но если там так, как ты говоришь, значит там массив - это что-то типа класса, а в С++ массив это просто кусок памяти от А до В.
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
23.10.2012, 20:26 #22
Цитата Сообщение от KernelSource Посмотреть сообщение
Динамический массив, в отличие от статического, не обязан быть непрерывным блоком данных,
Цитата Сообщение от KernelSource Посмотреть сообщение
Я бы рад, но ассемблер хромает.
У Вас не только ассемблер хромает.

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

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

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

Цитата Сообщение от KernelSource Посмотреть сообщение
в котором каждый элемент является ссылкой на другой одномерный динамический массив.
Указателем, а не ссылкой. В остальном всё верно. Создание таких массивов рассматривается в любой книжке для чайников, т.к. это базовый уровень знаний языка программирования.
0
24.10.2012, 06:08
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"; ...


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

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

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