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

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

14.02.2014, 23:54. Показов 5568. Ответов 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
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 15:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ValeryS Посмотреть сообщение
а вектор не так действует?
АДЫН: я написал "ИМХО"
ДВА: я не люблю чёрные ящики, они мне кажутся нудными(так понятнее?) =)

Добавлено через 10 минут
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот оно, безудержное веселье.
А Вы понимаете о чём я говорю)
На самом деле, я считаю, что человек должен сначала научиться пользоваться
Цитата Сообщение от Tulosba Посмотреть сообщение
криворукописные реализации
чтобы поправить функцию собственных рук к прямой...(хорошая метафора, мне понравилось))), а уж потом воспользоваться
Цитата Сообщение от Tulosba Посмотреть сообщение
Рабочий, проверенный временем стандартный библиотечный код
.
А потом, когда начнёшь писать что-то серьёзное, критическое к ресурсам, тогда Ваши проверенные временем штуки окажутся слегка тяжеловатыми для алгоритма и "мастер программирования", умеющий пользовать готовую кухню, либо будет довольствоваться фирменным бутербродом каждый тик процессора, либо придёт к мнению, что проверенный фирменный бутерброд - штука хорошая, легка в приготовлении, но без первого желудок может уйти в бессрочный отпуск...блин, надо было быть писателем или даже поэтом)
Векторы не медленнее "низкоуровневых функций"? "Жучки вылазили" у меня не часто, может поэтому я сейчас слишком субъективен.

Добавлено через 1 минуту
Цитата Сообщение от Arkaniy Посмотреть сообщение
вектор - это тоже
Пользуйтесь, чем хотите) Мне бы только "спасибо" капало)
0
 Аватар для Arkaniy
107 / 107 / 21
Регистрация: 29.08.2012
Сообщений: 453
12.03.2014, 15:20  [ТС]
Retyrn0, придерживаюсь такого же мнения. Использовать всё готовое - не всегда хорошо. Но опять же - не всегда. Порой оно того не стоит, чтобы корячиться и писать своё, когда можно взять готовое.
Тут уже всё зависит о поставленной задачи и условий её реализации.

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

Не по теме:

Retyrn0, да что та "репа"? Не за этим ведь тут сидим.:)

0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 15:24
Цитата Сообщение от Arkaniy Посмотреть сообщение
не всегда
Я о том, что если человек только учит программирование и действительно хочет его понимать, а не только знать, то лучше не пользоваться готовым, а когда уже "каунт-мастер-сенсей" достигнет высот небосвода, тогда уже можно использовать готовые решения, понимая соотношение времени написания и времени выполнения, к примеру. Это для изучения. Но если это банальная задачка, которую надо сдать преподу, чтобы тот отстал, то нахрен эти грабли, пользуйтесь векторами)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.03.2014, 15:29
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Векторы не медленнее "низкоуровневых функций"?
Вы понимаете всю абсурдность этого вопроса? Не стоит путать время выполнения с временем разработки. В разных ситуациях приоритет может отдаваться тому или иному.
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Мне бы только "спасибо" капало)
А зачем? Заниженное ЧСВ повышать?
0
12.03.2014, 15:33
 Комментарий модератора 
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Мне бы только "спасибо" капало)
Retyrn0, ая-яй. 5.10
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
12.03.2014, 15:33
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Векторы не медленнее "низкоуровневых функций"?
что есть низкоуровневая функция?
где тормоза при таком обращении?
C++
1
a[6]=5;
Цитата Сообщение от Retyrn0 Посмотреть сообщение
"Жучки вылазили" у меня не часто, может поэтому я сейчас слишком субъективен.
значит все таки вылазили? а тестировал на всех уровнях или работает и ладно
вектор реализован на всех платформах,и просто перекомпилируй функцию и все
А с твоим подходом переход на другую платформу придется переделывать все
И скорость разработки никто не отменял
Программа нужна "еще вчера" и ни кому будет не интересна супер-пепер быстрая программа через десять лет
А насчет
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А потом, когда начнёшь писать что-то серьёзное, критическое к ресурсам, тогда Ваши проверенные временем штуки окажутся слегка тяжеловатыми для алгоритма и "мастер программирования",
"Мастер программирования" знает как найти узкие места и как их обойти, не переписывая каждый раз printf
80 процентов ускорения лежат не в "вылизывании" функций, а в измерении алгоритма
простейший пример
на Атмеге реализовывал контроллер шагового движка есть переменная "номер шага" лежит в пределах 0-1600
реализовал сначала вот так
C++
1
step%=1600;
программа умерла, пока подсчитывал остаток, таймер уже готовит новое прерывание,и все только крутит движок на остальное времени нет
заменил на
C++
1
2
while(step>=1600)
   step-=1600;
и все полетело
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 15:38
Цитата Сообщение от Tulosba Посмотреть сообщение
Векторы не медленнее "низкоуровневых функций"?
Вы понимаете всю абсурдность этого вопроса?
Вопрос не абсурден, если между строк прочитать, что речь идёт о медленности выполнения, а не разработки. Но я каюсь, зря не уточнил это сразу, не возникло бы недопонимания, простите.

Цитата Сообщение от Tulosba Посмотреть сообщение
В разных ситуациях приоритет может отдаваться тому или иному.
Смотрите-ка, мы сошлись во мнении, только Вы не дочитали моё сообщение, по-видимому, я там как раз это и написал.

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
А зачем? Заниженное ЧСВ повышать?
Не поверите, у меня переменная ЧСВ даже не объявлена ;-) Если Вы не умеете распознавать иронию, то...не знаю..то Вы не умеете распознавать иронию)

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
где тормоза при таком обращении?
Вызывайте её пару тысяч-миллионов раз в секунду)

Добавлено через 31 секунду
Цитата Сообщение от ValeryS Посмотреть сообщение
значит все таки вылазили?
А есть люди у которых всё всегда шло гладко? ;-)

Добавлено через 32 секунды
Цитата Сообщение от ValeryS Посмотреть сообщение
А с твоим подходом переход на другую платформу
Вы что подразумеваете под платформой?
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
12.03.2014, 15:41
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Я о том, что если человек только учит программирование
Я думаю, что человек который только учит программирование должен обходить malloc минимум за километр.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
12.03.2014, 15:46
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вызывайте её пару тысяч-миллионов раз в секунду)
и что????
все это превратится в такой примерно код
Assembler
1
2
mov eax=5;
mov [esi+6]=eax;
время исполнения один такт
или ты думаешь что
C++
1
*(a+6)=5;
быстрей будет?
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вы что подразумеваете под платформой?
кроме Видос и компьютеров IBM PC с его Intel 80x86 есть еще куча других компьютеров и систем
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 15:50
Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
1 step%=1600;
Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
1
2 while(step>=1600)
step-=1600;
% медленнее, чем while(>=) - хорош!
А если:
C++
1
step-=(int)(1600*(int)(step/1600));
Если step не большой, то Вы бесконечно правы, а если цикл выполниться много раз? Я не силён в архитектуре контроллеров, не знаю скорость "*" и "/", так что это скорее вопрос.

Цитата Сообщение от ValeryS Посмотреть сообщение
вектор реализован на всех платформах
Да. Как сказал один великий кто-то в сети, лучше написать работающий код под одну архитектуру, чем не работающий, но переносимый.

Добавлено через 47 секунд
Цитата Сообщение от TheFox Посмотреть сообщение
должен обходить malloc минимум за километр
Да, лучше использовать new =)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.03.2014, 15:51
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вопрос не абсурден, если между строк прочитать, что речь идёт о медленности выполнения
Так он поэтому и абсурден. Низкий уровень на то и низкий, чтобы быть ближе к железу, а стало быть быстрее.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 15:55
Цитата Сообщение от ValeryS Посмотреть сообщение
такой примерно кодКод ASM
1
2 mov eax=5;
mov [esi+6]=eax;
Ого. Т.е. можно ворочать размерами выделенной памяти, изменяя значение пары регистров?

Добавлено через 46 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
кроме Видос и компьютеров IBM PC с его Intel 80x86 есть еще куча других компьютеров и систем
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Да. Как сказал один великий кто-то в сети, лучше написать работающий код под одну архитектуру, чем не работающий, но переносимый.
Я же уже писал.

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
а стало быть быстрее
Позвольте Вас перефразировать...не "абсурден", а "риторический".
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
12.03.2014, 16:02

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Низкий уровень на то и низкий, чтобы быть ближе к железу
к земле.

1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
12.03.2014, 16:06
Цитата Сообщение от Retyrn0 Посмотреть сообщение
% медленнее, чем while(>=) - хорош!
растасовку процессоров посмотри
самая медленная операция пока что деление
Цитата Сообщение от Retyrn0 Посмотреть сообщение
step-=(int)(1600*(int)(step/1600));
и что опять деление
мдя сильно я сомневаюсь что ты оптимизацией занимался
Цитата Сообщение от Retyrn0 Посмотреть сообщение
а если цикл выполниться много раз?
он не может выполнятся много раз
потому что шаги добавляются максимум по сотне
вот это и называется смена алгоритма
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Ого. Т.е. можно ворочать размерами выделенной памяти, изменяя значение пары регистров?
где то есть разговор о размере памяти?
речь идет о обращении к элементам вектора
а если ты постоянно крутишь размерами вектора
то ни new ни malloc ни alloc не спасут
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
12.03.2014, 16:43
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Я не силён в архитектуре контроллеров, не знаю скорость "*" и "/", так что это скорее вопрос.
Вообще-то умножение и деление очень долгие операции даже на x86. А этот цикл быстро выполнится в конвейере. Так что скорее всего он будет быстрее и на х86
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 16:48
Цитата Сообщение от ValeryS Посмотреть сообщение
мдя сильно я сомневаюсь что ты оптимизацией занимался
Думаю, я смогу с этим жить)
Цитата Сообщение от ValeryS Посмотреть сообщение
шаги добавляются максимум по сотне
Тогда, как я говорил, Вы бесконечно правы.
Цитата Сообщение от ValeryS Посмотреть сообщение
где то есть разговор о размере памяти?
Почитайте на первой странице обсуждения, там автор вопроса русским языком написал ;-)
Цитата Сообщение от ValeryS Посмотреть сообщение
то ни new ни malloc ни alloc не спасут
Меня спасали. Нужно воспользоваться не только new delete[], но ещё и мышлением с долей хитрости и будет счастье ;-)
Цитата Сообщение от ValeryS Посмотреть сообщение
вот это и называется смена алгоритма
А, да?
Но если шаги добавляются максимум по сотне, то зачем вообще while()?
C++
1
if(step>=1600)step-=1600;
Добавлено через 2 минуты
Цитата Сообщение от TheFox Посмотреть сообщение
Вообще-то умножение и деление очень долгие операции
Каюсь, про деление забыл(последнее время оптимизировал arcsin arcos, отвлёкся от бытовухи), а умножение на моей x86 архитектуре занимает столько же времени, сколько сложение и вычитание. Я проверял.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
12.03.2014, 17:11
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Но если шаги добавляются максимум по сотне, то зачем вообще while()?
а на всякий случай, вдруг сбой какой нибудь
а при нормальной работе
C++
1
if(step>=1600)step-=1600;
C++
1
while(step>=1600)   step-=1600;
практически идентичны
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 17:37
Цитата Сообщение от ValeryS Посмотреть сообщение
вдруг сбой какой нибудь
Если сбой, то в обоих вариантах ошибка будет ошибкой...
А привязка к 1600 на столько принципиальна? Нельзя воспользоваться более выгодными 1024 или 2048? Тогда условия вообще теряют значимость, достаточно банальных битовых операций. Ну не важно.
Вы оптимизировали свой алгоритм подменой медленной функции более быстрой - это, я считаю, ОЧЕНЬ ПРАВИЛЬНО. А почему Вы не соглашаетесь, что подмена более медленных векторов на более быстрые new delete+хитрость - тоже оптимизация алгоритма - для меня загадка. Если человек потанцует на граблях new delete, то он будет понимать что происходит с памятью и ничто не помешает ему воспользоваться векторами, если он посчитает, что скорость разработки приоритетнее скорости выполнения.
1
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
12.03.2014, 18:06
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А привязка к 1600 на столько принципиальна?
очень
шаговый движок делает 200 шагов за один оборот я использовал микрошаг( шаг делится на 8) больше делить нельзя мощность падает
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Нельзя воспользоваться более выгодными 1024 или 2048?
пытался не получается никак не смог к степени двойки привести
да и память у микроконтроллера все таки не резиновая
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А почему Вы не соглашаетесь, что подмена более медленных векторов на более быстрые new delete+хитрость - тоже оптимизация алгоритма - для меня загадка.
Я не соглашаюсь
просто сначала нужно сделать на векторах чтобы проверить алгоритм
а потом можно и заменить, только предварительно замерить именно ли вектора при перераспределении тормозят
но я сомневаюсь что выигрыш будет шибко большой внутри у вектора тот же new с delete

если уж нужно скорость то можно выделить память с избытком там миллионов 10 или 100 и все проблемы уйдут с перераспределением
извечный конфликт память/ скорость
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
12.03.2014, 19:30
Цитата Сообщение от ValeryS Посмотреть сообщение
внутри у вектора тот же new с delete
Но вовнутрь вектора никак не забраться, если хочется нестандартной оптимизации.
Цитата Сообщение от ValeryS Посмотреть сообщение
я сомневаюсь что выигрыш будет шибко большой
Я не от балды говорю. Я лично сталкивался с задачей, когда изменение размеров происходило достаточно часто, чтобы вектор внёс чувствительные тормоза и я оптимизировал алгоритм и ЗНАЧИТЕЛЬНО ускорил его. Я говорю не о том, что простая замена вектора на new delete значительно ускорит алгоритм, хотя ускорение будет, но если ещё и понаглеть и подойти к памяти по другому, то ускорение очень значительное. Цифр я не помню, но помню, что почти начал собой тогда гордиться =)
Цитата Сообщение от ValeryS Посмотреть сообщение
сначала нужно сделать на векторах чтобы проверить алгоритм
Я же говорил, что если речь идёт о конкретной задаче, то да, но по контексту вопроса ТС, мне показалось, что это для изучения программирования.
Теоретически, можно научиться читать сразу по словам, но люди почему-то начинает с букв)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2014, 19:30

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru