Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453

Представление памяти, указатели

14.02.2014, 23:54. Показов 5759. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане.
Практика языка и программирования уже есть, но всё на начальном уровне. Сейчас вплотную столкнулся с указателями. Везде пишут, что они для экономии памяти, динамических массивов и много другого...
Как известно любой указатель весит 4 байта. При создании объекта используются именно эти 4 байта, при удалении оного они освобождаются. Собственно вопрос: где находятся сами объекты?
В кач-ве эксперимента проверял выделение физической памяти во время работы программы. При создании/удалении выделялось/освобождалось 4 байта соответственно. Сами объекты были намного большего размера.
Где же они "висят"?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2014, 23:54
Ответы с готовыми решениями:

Представление класса в памяти
Всем доброго времени суток! Подскажите ка,как класс представляется в памяти?и как представляется структура? Простите за столь...

Представление чисел в памяти!
нужна сделать реализацию числа в памяти получилось для одного числа, а как сделать для нескольких, т.е передаю {1,1,0,0} выдаст {0,0,1,1},...

Представление и структура указателя в памяти
Указатель занимает 4 байта памяти. Если судить по определению "указатель - это переменная, которая хранит адрес", то все эти 4 байта...

55
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
12.03.2014, 19:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Retyrn0 Посмотреть сообщение
но если ещё и понаглеть и подойти к памяти по другому, то ускорение очень значительное.
это называется написать свой менеджер памяти

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
Я не соглашаюсь
здесь должен быть вопрос
Я не соглашаюсь? :)
типа "Рабинович не сволочь?=-O Я извиняюсь"

0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 19:40
Цитата Сообщение от ValeryS Посмотреть сообщение
с избытком там миллионов 10
В моей задаче постоянно то выделялась, то освобождалась память под массивы. Все никак не могли поместиться. Представьте, есть 3-d объекты, представленные в виде вокселов(не kd-деревьев, а именно массивов вокселов - так нужно было). Все объекты никак не могут вместиться в ограниченной оперативной памяти - нужно хитрить. Используем тот факт, что для правильного отображения объекта, количество "активных" воксклов можно уменьшить, в зависимости от расстояния до объекта. Камера движется - расстояние меняется постоянно, массивы постоянно меняются в размерах. Вам не рассказывать на сколько "динамична" сцена, где векторы используются?) А объектов-то может быть ух сколько.

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
написать свой менеджер памяти
Вы мне льстите) До менеджера памяти мой алгоритм не дотягивал, мягко говоря) Но что абсолютно точно, векторы мне однозначно не помогли и никакие действия над векторами не выполняло задуманного, а new delete - ами можно извращаться на сколько душе угодно)
0
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
12.03.2014, 20:45  [ТС]
Ох, ну и начался же тут холивар А всё с невинного вопроса.
Вобщем, много всего понаписано, но суть всё же одна: для разных целей разные подходы.
Retyrn0 был прав, когда писал, что программу я пишу в учебных целях, но это всё же не университетское задание, а так - для себя. Я попробую написать несколько вариантов. И с векторами сделаю, и мэллоком, и new-delete. Но вот раз пошел такой разговор об оптимизации, то, пожалуй, всё же спрошу. Как измеряется время работы программы, функции, отдельных участков кода и т.д.? Как понять мне что всё же будет быстрее? Знаю, что это уже на более низком уровне происходит, но вкратце хотелось бы услышать, если можно.
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
12.03.2014, 21:08
Цитата Сообщение от Arkaniy Посмотреть сообщение
Как измеряется время работы программы
Например Visual Studio Profiling Tool.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
12.03.2014, 21:43
Цитата Сообщение от Arkaniy Посмотреть сообщение
то, пожалуй, всё же спрошу. Как измеряется время работы программы, функции,
есть специальные программы профилировшики
http://ru.wikipedia.org/wiki/П... форматика)
но можно и по простому
использовать функцию
clock_t clock(void)

C++
1
2
3
clock_t cl1= clock();
// тут то что нужно измерить 
clock_t cl=clock()-cl1;
http://ru.wikipedia.org/wiki/Time.h
1
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
12.03.2014, 21:53  [ТС]
TheFox, ValeryS, спасибо. На досуге доберусь и до этого.
Но для полной картины с оптимизацией и прочими тонкостями работы функций нужно ведь знать ассемблер. Не так ли?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
12.03.2014, 22:10
Цитата Сообщение от Arkaniy Посмотреть сообщение
о для полной картины с оптимизацией и прочими тонкостями работы функций нужно ведь знать ассемблер. Не так ли?
ну ассемблер это " высший пилотаж" тем более что на тех знаниях которые дают ты оптимальную программу не составишь, тут уже нужно курить мануалы от Интела
современные оптимизаторы в компиляторах делают достаточно быстрый код
для оптимизации нужно знать алгоритмы
например здесь со стабильностью раз в месяц возникает вопрос проверить число простое или нет
и обязательно кто то вставит код типа такого
C++
1
2
3
4
5
6
7
bool fnc(int n)
 {
  for(int i=2;i<n;i++)
    if(n%i==0)
        return false
return true;  
 }
хотя уже озвучены алгоритмы на порядки быстрее

или еще пример
сосчитать сумму ряда от 1 до 100
C++
1
2
for(int i=1;i<101;i++)
  summ+=i;
забывая школьную математику и формулу суммы арифметической прогресии
сумма равна сумме первого и последнего члена деленная на 2 и умноженная на количество членов
C++
1
summ = (1+100)* 100/2;
могу привести кучу примеров когда изменение алгоритма ускоряет программу в разы а то и на порядки
1
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
12.03.2014, 22:28  [ТС]
ValeryS, ага, понял. Нужно уметь оперировать именно с алгоритмами. Что до ассемблера, то пытался как-то начать, но так и не смог. Думаю "высший пилотаж" - это верно подмечено. В универе, к сожалению, ассемблера и не будет. Что можете посоветовать в кач-ве литературы? И вообще, стоит ли начинать углубляться в дебри? Или лучше сделать упор на языках высокого уровня. Вот последнее это уже немного в сторону трудоустройства.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
12.03.2014, 22:48
Цитата Сообщение от Arkaniy Посмотреть сообщение
Что можете посоветовать в кач-ве литературы? И вообще, стоит ли начинать углубляться в дебри? Или лучше сделать упор на языках высокого уровня.
смотря что ты хочешь?
если сидеть на одной платформе и писать например БИОС то без ассемблера не обойтись
если на разных платформах то ЯВУ
почитать мне трудно чтото советовать я ассемблер изучал еще на 8086 80286
сейчас даже не лезу( если не считать дизасемблирования) все эти конвееры распараллеливание команд нужно изучать очень подробно
могу посоветовать поискать книги Криса Касперски, достаточно живо пишет и вроде понятно, но и там косячки встречаются
для начала "Искуство дизасемблирования" и "Фундаментальные основы хакерства"
1
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
12.03.2014, 23:00  [ТС]
ValeryS, спасибо большое. Не знаю дойду ли до этого, но книги всё скачаю
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
12.03.2014, 23:28
Цитата Сообщение от Arkaniy Посмотреть сообщение
В универе, к сожалению, ассемблера и не будет.
На всех сколько-нибудь программистских специальностях дают немного ассемблера. Весь он есть только в Интеловских мануалах. В принципе, он сейчас не сильно нужен, так как даже драйвера можно писать без него, а работа с, например, WinAPI на нем не особенно отличается от таковой на ЯВУ, но общее представление иметь надо. Хороший FAQ по ассемблеру х86 есть на этом форуме в разделе низкоуровневого программирования Там в том числе есть ответ на вопрос что почитать.
1
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 23:44
Цитата Сообщение от Arkaniy Посмотреть сообщение
Как понять мне что всё же будет быстрее
Вот код сравнения времени выполнения сложений и делений. Циклы специально для того, чтобы результат замеров были точнее(при одном сложении и умножении не пройдёт ни одной милисекунды, тем более планировщик ОСИ вносит погрешность, поэтому, как в любой науке, чем больше замеров, тем точнее результат).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int i,time_start,a=5,b=5,c=5;
char text[10];
 
time_start=GetTickCount();
for(i=0;i<1000000000;i++)
{
  a=b+c;
}
itoa(GetTickCount()-time_start,text,10);
cout<<"Время выполнения 1-го участка = "<<text<<endl;
 
time_start=GetTickCount();
for(i=0;i<1000000000;i++)
{
  a=b/c;
}
itoa(GetTickCount()-time_start,text,10);
cout<<"Время выполнения 2-го участка = "<<text<<endl;
На экране появляются 2 числа. Перовое число показывает сколько милисекунд выполнялись сложения в цикле, 2-е число - деления. Очевидным будет то, что деление выполняется дольше, чем сложение - число будет больше. Это один из пример и я не собираюсь его навязывать, я пользуюсь этим - не приходится пользоваться какими-то дополнительными инструментами, да и результат в милисекунда - не плохая точность. А можно вообще QueryPerformanceCounter(), но там свои заморочки.
1
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
13.03.2014, 10:39  [ТС]
TheFox, на всех, да не на всех. Нам сразу сказали, что это вещь важная, но у нас не будет...
Вот этой ссылке как раз и пытался начать. Возможно, рано еще мне.
Retyrn0, спасибо, но всё же, я копну в сторону дополнительных инструментов для оптимизации
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
13.03.2014, 11:42
Arkaniy, по поводу ассемблера есть еще очень неплохая книжка Зубкова. (не знаю, были ли новые издания, но в любом случае посмотреть стоит)
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
13.03.2014, 12:06
Цитата Сообщение от Arkaniy Посмотреть сообщение
Возможно, рано еще мне.
Ох, даже не знаю, что там может быть рано... Это же не какой нибудь Haskell или автоматы. Но, вот вам краткие лекции по самым основам ассемблера х86, такие простые, что хоть в 5 классе читай
Вложения
Тип файла: zip as.zip (6.74 Мб, 8 просмотров)
0
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
14.03.2014, 13:17  [ТС]
Спасибо всем отписавшимся. Книги скачал, но пока отложу их в недолгий ящик
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2014, 13:17

Представление памяти std::vector
Добрый день! Вопрос по вектору, из его описание следует, что он располагает свои элементы линейно до тех пор пока это возможно, а в случае...

Внутреннее представление числа в памяти
нужно сделать реализацию числа в памятиfloat d1 = 72.9e-8;... а как??? это нужно число перевести в двоичную систему, или как???

Представление в памяти массивов и матриц
Помогите решить эту задачу в С++ Для разряженной матрицы целых чисел в соответствии с индивидуальным заданием создать модуль доступа к...

Представление в памяти массивов и матриц
Для разряженной матрицы целых чисел создать модуль доступа к ней: -все нулевые элементы размещены на главной диагонали и в верхней...

Двоичное представление области памяти
Здравствуйте. В одной из лабораторных работ требуется взять готовые функции из методички и, в принципе, только посмотреть, какой результат...


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

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru