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

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

14.02.2014, 23:54. Показов 5561. Ответов 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,875
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,875
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,875
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,875
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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
Ответ Создать тему
Новые блоги и статьи
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru