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

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

14.02.2014, 23:54. Показов 5762. Ответов 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,876
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,876
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,876
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,876
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,876
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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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