BG Development


Страници: (2) 1 [2]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Защо е имплементирано така
Bender
Публикувано на: 06-12-2017, 11:43
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4873
Регистриран на: 19.06.14



абе не знам, то такова нещо като променлива няма, и без значение от къде процесор аби трябвало да го набуха в регистър, щото иначе няма как да извършва операции върху него

може би търся смисъл там където няма


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
SuN
Публикувано на: 06-12-2017, 12:18
Quote Post


Group Icon
Име: Финто Нешън
Група: Администратор
Ранг: Почетен член

Мнения: 4739
Регистриран на: 27.01.05



Без значение от оптимизациите, в последно време ми е толкова трудно да чета код, че бих използвал const само за да ми обърне внимание на факта, че не *би* трябвало да се променя стойността.

Даже съм почнал да пиша по два-три реда повтарящи се коментари с препратки към документация тук и там, защо бутам тоя бит или правя друго нещо в различни файлове.

Това мнение е било редактирано от SuN на 06-12-2017, 12:21


--------------------
Копирай лесно ударено и - ѝ Ѝ
Замърсяване на въздуха в София - http://aqicn.org/city/bulgaria/sofia/druzhba/
PMEmail Poster
Top
gat3way
Публикувано на: 06-12-2017, 12:22
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1724
Регистриран на: 22.06.12



Мне, дори да имаше безкрайно много регистри за да се напъхат всички променливи там, това би било доста глупава идея. Първо защото глобалните променливи могат да се достъпват индиректно през указател и компилаторът ще се види в чудо да предскаже какво точно се маже през този указател и "ахаааа ама той сочи към тази променлива, значи ще променя регистъра вместо това" изисква свръхестествени способности.

Второ защото многонишковото програмиране отива в киреча така, представи си да речем някаква променлива която се достъпва от няколко нишки и съответно е защитена с мутекс, ако едната нишка я промени и тя е в регистър наистина, другата нишка никога няма да разбере за тази промяна.
PMEmail Poster
Top
Дон Реба
Публикувано на: 06-12-2017, 12:45
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 5779
Регистриран на: 11.11.06



ако променливата не е volatile, дори да е глобална или през указател, компилатора казва "ебал съм го, пазя в регистър" така че указател или не, глобална или не, всичко накрая се бичи все едно е локална проленлива, така че версията оптимизация ме съмнява
PM
Top
AK-85
Публикувано на: 06-12-2017, 13:03
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 725
Регистриран на: 06.07.06



QUOTE (Bender @ 06-12-2017, 10:43)
може би търся смисъл там където няма

Горе-долу - ето го генерираният код:
Оригинал
Кратък вариант
Аз разлика не виждам (обаче промених оригиналът да връща същата стойност като съкратения вариант).

Да кажем, че е оправдано, ако очакваш компилаторът да е глупав, но после видях, че кодът е написан през 2016 година. Има и друго обяснение - поне аз понякога се хващам, че като работя известно време върху някакъв код, започвам да изпускам разни дреболии, които обаче след примерно 2-3 дни (по време на които съм работил върху нещо тотално различно) ми изглеждат очевидни.

QUOTE (gat3way @ 06-12-2017, 09:16)
... първата е че така компилаторът има по-голяма вероятност да държи стойността й в регистър вместо да я презарежда от/записва в паметта всеки път когато я достъпваш.

Това е мно-о-о-го спорно.

QUOTE (gat3way @ 06-12-2017, 09:16)
Втората причина е че по презюмпция паметта алокирана в стека е "гореща памет", т.е стек фрейма е достъпван много наскоро (при викане на функцията) и с много голяма вероятност е в кеша.

Иронията е, че този пример не използва стек (виж генерирания код).

QUOTE (gat3way @ 06-12-2017, 11:22)
Второ защото многонишковото програмиране отива в киреча така, представи си да речем някаква променлива която се достъпва от няколко нишки и съответно е защитена с мутекс, ако едната нишка я промени и тя е в регистър наистина, другата нишка никога няма да разбере за тази промяна.

Дон Реба ме е изпреварил, но да отбележа - другата нишка няма гаранция да разбере за промяната преди отключването на мутекса (това е стандартният модел на паметта в C/C++), така че до този момент компилаторът е абсолютно свободен да си разполага променливите, както си иска.
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) 1 [2]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0