Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Заблокирован
12.01.2017, 12:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В результате при обращении к агрументу-шареду будет все равно двойное разименовывание.
Выше - двойное "разыменовывание" сырого указателя. Разницы нет, спорить с дизасмом бесполезно Если твоя не понимать, объединю два дизасма в одной теме.
shared_ptr:
Assembler
1
2
mov     rax, QWORD PTR [rdi]
mov     eax, DWORD PTR [rax]
Raw ptr:
Assembler
1
2
mov         rcx,qword ptr [rsp+0D8h]
mov         eax,dword ptr [rcx]
Итог:
Никаких дескрипторов.
Никаких сравнений.
В общих случаях, код с умными указателями такой же как с сырыми.
Ты пишешь какую-то ересь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2017, 12:09
Ответы с готовыми решениями:

Что даёт использование классов (и шире - ООП) в языке программирования С++?
Понял что такое классы. Но как я ими могу пользоваться ? Допустим. Я создал программу для ввода банковских реквизитов. Я могу в...

Концепция ООП и их использование в современных языках программирования
Дали курсовую на эту тему. Подскажите, какую литературу, которую можно бы было использовать пр написании. Спасибо. :з

Что дает использование сетки Бутстрапа
Ведь даже если элементам задать margin в процентах плюс ширину в процентах,то элементы перемещаются соотвественно с уменьшением экрана. ...

74
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 12:39
Цитата Сообщение от nimazzzy Посмотреть сообщение
В общих случаях, код с умными указателями такой же как с сырыми.
угу. еще скажи что вот так разницы нет:
C++
1
2
3
4
5
6
7
8
9
void Foo(int a*){
    *a;
}
//и
void Bar(shared_ptr<int>& a){
      *a;
}
//вариант 
void Baz(shared_ptr<int> a) //не рассматриваем потму как заведомо инкремент и декримент коунтера будус з схватом и освобождением атормарного счетчика каждый.
// при этом считаем что функции не инлайнемые которых большинство.
Цитата Сообщение от nimazzzy Посмотреть сообщение
код с умными указателями
Вернее с полоумными
C++
1
2
3
4
5
6
int main(){
    int *a=new int;
    shared_ptr<int> A(a);
    shared_ptr<int> B(a);
   A=nullptr; // все креш гарантирован
}
Если это умные указатели то сырые явно безопаснее.
0
Заблокирован
12.01.2017, 12:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
void Foo(int a*){
* * *a;
}
//и
void Bar(shared_ptr<int>& a){
* * * *a;
}
Говорить тут нечего. Код выше уже все сказал, компилятор их можешь сделать одинаковыми с точки зрения обращений к памяти (размена, как ты говоришь). Не говоря уже о том, что никаких дескрипторов и сравнений там нет.
Еще и ++(*a) и ++(*b), где a - сырой, а b - сухой, также могут компилироваться в одинаковый код. И не будет никаких дескрипторов и сравнений.

Добавлено через 27 секунд
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
в любом случае два размена и сравнение
Когда ты уже покажешь сравнение? Хватит юлить. Ты за свои слова отвечать можешь? Или хотя бы напиши: "извините, я ошибся". Это просто.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 13:16
Цитата Сообщение от nimazzzy Посмотреть сообщение
компилятор их можешь сделать одинаковыми с точки зрения обращений к памяти (размена, как ты говоришь)
Для аргументов функций не может.
0
Заблокирован
12.01.2017, 13:22
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Для аргументов функций не может.
То есть, ты сейчас споришь с дизассемблером, я прав? Выше код написан. Он одинаков. В случае ссылки передается адрес shared_ptr (он локальный объект, лежит на стеке) в регистре. Он же адрес указателя. Потом значение указателя кладется в другой регистр и по нему берется значение. То же самое с сырым указателем. Значение указателя лежит в стеке (локальная переменная), для передачи кладется в регистр. После обращение по адресу из регистра. Даже с точки зрения обычной логики это одно и то же. Что и подтверждается дизассемблером. Глупо с этим спорить.
Цитата Сообщение от nimazzzy Посмотреть сообщение
Когда ты уже покажешь сравнение? Хватит юлить. Ты за свои слова отвечать можешь? Или хотя бы напиши: "извините, я ошибся". Это просто.
1
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 13:39
Цитата Сообщение от nimazzzy Посмотреть сообщение
То есть, ты сейчас споришь с дизассемблером, я прав?
Возьми код из реальной проги а не из тестового примера в котором нет использования данных. Оптимизатор для того и сучествует чтобы не читать и не вычислять данные которые потом не используются. А код для аргументов функций будет разный. Потому что для сырого указателя указатель-аргумент в функцию приходит в регистре. Для шареда - либо адрес указателя приходит в регистре а не сам указтель, либо указатель в стеке приходит что тоже самое за исключением того что к SP еще смещение дабавлять придется. [EBX] и [SP+n] на самом деле две огромные разницы.
0
Заблокирован
12.01.2017, 13:45
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А код для аргументов функций будет разный. Потому что для сырого указателя указатель-аргумент в функцию приходит в регистре.
Ага, вот и слив продолжается. Теперь ты уже не утверждаешь про "там 2 размена, а в сыром меньше!", теперь ты пытаешься перевести спор на "компилятор сгенерирует разный бинарный код" Конечно, разный! Я это тоже уже писал:
Цитата Сообщение от nimazzzy Посмотреть сообщение
Разница лишь в том будет, что при передаче указателя в функцию, первая операция будет до вызова.
Ну, ты мастер. Ладно, с тобой все ясно: очень-очень много текста, здравого смысла в нем 0, и за слова ответить не можешь, сообщения игнорируешь, с темы на тему пытаешься плавно перевести. Я думал, ты найдешь в себе силы признать неправоту. Тебе вот самому-то не стыдно? Но что ж, твои фантазии с несуществующими дескрипторами, двойными разменами и сравнениями - твоя проблема, не буду больше ей мешать.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.01.2017, 14:40
Цитата Сообщение от nimazzzy Посмотреть сообщение
Тебе вот самому-то не стыдно?
Нет не стыдно. Мои смартпоинтеы в отличии от STL-ских Не крешат программы при допустимом их интерфейсом с ним обращении (т.е. без переаписи их внутренних
Цитата Сообщение от nimazzzy Посмотреть сообщение
Разница лишь в том будет, что при передаче указателя в функцию, первая операция будет до вызова.
Разница будет в том что это будут разные операции. Одни они только потому что для неаргументов и указатель из шареда и просто указатель это данные которые лежат по определенному смещению. А вот при передаче в функцию он должен передать цельный объект а не какой то его элемент. По этому для указателя просто в регистр прочитается его значение. Для шареда же при передаче по ссылке в регистр запишется его адрес (самого объекта шареда), который тоже еще надо вычислить или прочитать а значение указателя из шареда будет прочитано уже в функции. При передаче же шареда через стек накладные расходы будут гораздо выше. Т.е. закешировав указатель на объект из дескриптора в сам шаред вылечив одну проблему поимели другую более жесткую.
0
12.01.2017, 15:16

Не по теме:

посадить бы вас всех в одну комнату и посмотреть как вы бы общались лицом к лицу. :D

1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
12.01.2017, 17:13
Цитата Сообщение от nimazzzy Посмотреть сообщение
То есть, ты сейчас споришь с дизассемблером
кто-то спорит с дизассемблерами)
а кто-то со сказочными эльфами))

Цитата Сообщение от nimazzzy Посмотреть сообщение
Я думал, ты найдешь в себе силы признать неправоту
в интернетах кто-то не прав!

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
посадить бы вас всех в одну комнату и посмотреть как вы бы общались лицом к лицу.
это ещё фигняяяя)
у нас перед Новым годом ещё и перепились все вином до кучи)
когда понеслать канитель на повышенных тонах: "ваш линукс г...",
мну понял - над бежать))

0
Заблокирован
15.01.2017, 11:09
Еще с помощью классов можно реализовать неявные приведения/преобразования типов в выражениях (к коим относится и вызов функции).

Хотя неявные преобразования типов сами по себе зло, но тем не менее
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.01.2017, 16:27
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Хотя неявные преобразования типов сами по себе зло, но тем не менее
Это исключительно по мнению разработчиков АДА они зло. Кстати ребятки давно поняли насколько они ошибались по поводу того что запрет неявного приведения позволит ошибки отлавливать. Когда из за слишком задуренного явного приведения начали ракеты взрываться пришлось таки признать концепцию с только явным приведением злом. На самом деле проблемы с типобезопасностью дает не запрет на смешение разных типов в одном выражении а определение алгебры над сущностями. т.е. набора операторов в т.ч. и операторов неявного приведения. т.е. по большому счету когда к примеру координату нельзя сложить с координатой а можно сложить только со смещением, а смещение получается либо в результате вычитания одной координаты из другой либо в результате умножения скорости на время.
0
Заблокирован
16.01.2017, 23:31
А как же контроль переполнения при сложении двух интежеров в сишечке?

Добавлено через 5 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
На самом деле проблемы с типобезопасностью дает не запрет на смешение разных типов в одном выражении а определение алгебры над сущностями
Ещё можно использовать "семантический тип" переменной, который может динамически меняться ("накручиваться").
т.е. в одной точке программы переменная X несет один смысл, а в другой точке программы эта же переменная несет несколько другой смысл

Добавлено через 1 минуту
Еще можно для переменной ввести тип - "историю". Т.е. историю прохождения переменной через круги ада (участие в разных выражениях).

И тогда посмотрев эту историю, можно узнать, насколько корректно переменная использовалась

Добавлено через 1 минуту
Т.е. концепций миллионы. Только их почему-то не используют торомоза разработчики новых языков и компитляторов
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
17.01.2017, 15:08
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
т.е. в одной точке программы переменная X несет один смысл, а в другой точке программы эта же переменная несет несколько другой смысл
Что порождает целую куч проблем. Именно из за этих проблем языки с динамической типизацией языки типа бейсика и не используются для решения серьезных задач. максимум для форматирования ввода-вывода.
0
Заблокирован
17.01.2017, 23:06
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Что порождает целую куч проблем.Именно из за этих проблем языки с динамической типизацией
я не про "типизацию". Я про семантику. Про "смысловые оттенки" и историю использования
Но тем не менее эта данность.
Понаблюдайте в своей программе за переменной.
Ведь ей смысл в каждом конкретном случае определяется выражением в которое она входит и её местом в этом выражении
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
17.01.2017, 23:14
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Ведь ей смысл в каждом конкретном случае определяется выражением в которое она входит и её местом в этом выражении
Ее смысл определяет именно ее смысл. Она имеет обычай иметь везде один и тот же смысл от момента ее создания до момента ее удаления.
0
Заблокирован
18.01.2017, 21:39
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ее смысл определяет именно ее смысл. Она имеет обычай иметь везде один и тот же смысл от момента ее создания до момента ее удаления.
__________________
Вы ошибаетесь.
Да. Главный смысл один, а оттенки меняются.

Например "переменная до обрушения канала" и "переменная после обрушения канала".
И там и там переменная одна, но её роль, а значит и смысловой оттенок изменились

Добавлено через 1 минуту
Или к примеру, если переменная имеет значение "2", то она несёт смысл "внимание".

а если значение "5", то она уже несет смысл "пришел писец"

Добавлено через 1 минуту
Т.е. переменная по разному может влиять на окружение.
А значит у неё может быть разный смысл

Добавлено через 45 секунд
Т.е. если переменная гоняется в одной части лабиринта - это одно, а если в другой - другое

Добавлено через 1 минуту
Аналогично и в случае когда переменная передается как фактический параметр функции.
Смысл переменной зависит от того, в какой функции она обрабатывается
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
18.01.2017, 22:26
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
А значит у неё может быть разный смысл
Смысл у нее один и тот же - в данном случае и при значении 2 и при значении 5 - состояние какой либо системы. Кстати у меня в таком случае значения обычно не 2 и 5 а stAttention и stLagopusCame
Цитата Сообщение от ИсмаилПркопенко Посмотреть сообщение
Аналогично и в случае когда переменная передается как фактический параметр функции.
Смысл переменной зависит от того, в какой функции она обрабатывается
Функция это уже другой алгоритм. А само понятие суть переменной имеет смысл исключительно в рамках какого либо определенного алгоритма.
0
Заблокирован
18.01.2017, 23:32
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Функция это уже другой алгоритм. А само понятие суть переменной имеет смысл исключительно в рамках какого либо определенного алгоритма.
Вот вот. Одна и та же переменная может использоваться в разных алгоритмах и иметь в них разный смысл.
А если рассматривать выражение как микроалгоритм, то становится понятно, что в разных выражениях переменная имеет разный смысл
0
 Аватар для smartpointer
70 / 64 / 40
Регистрация: 17.02.2014
Сообщений: 265
19.01.2017, 13:25
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А вот при передаче в функцию он должен передать цельный объект а не какой то его элемент.
У объекта также есть адрес, и в функцию не может передаваться целиком объект, в связи со спецификой передачи через стек, будет передан указатель на него, а далее уже в самой функции он может прокопироваться, в другую область стека...Поэтому без разницы что там передается, либо простой DWORD, либо объект на сотни байт...

Не по теме:


Fulcrum_013 опять решил поумничать, да не на того нарвался. Сидел бы в своих крестах лепил бы ООП и авто-контейнеры...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2017, 13:25

Посоветуйте книгу по C# в которой как можно шире раскрыты прелести ООП
посоветуйте, пожалуйста, книгу по C#, в которой как можно шире раскрыты прелести объектно-ориентированного программирования (области...

Что значат эти скобки >>> в языке программирования
зарание извиняюсь если вопросы глупые , я начал только сегодня изучать программирование на языке питон , сразу хочу сказать что мой уровень...

Использование функции DCount в элементе управления отчета Access2003 не дает желаемого результата. Что делать?
Здравствуйте. Имеем отчет Access2003, основанный на запросе &quot;запСота&quot;. В отчете в разделе Заголовок имеем вычисляемое поле со следующей...

На русском языке или языке программирования
Опишите на русском языке или на одном из языков программирования алгоритм получения из целочисленного массива А состоящего из 30 элементов...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru