Stilgar
Създадено на 05.07.2022, видяно: 783 пъти. #65273
За C# това не е вярно, можеш да си сглобиш типове които се предават по value, можеш и да взимаш pointers към тях, дори някои дето по принцип ходят на хийпа можеш да ги накараш да се алокират на стека. Не е сравнимо със C++ където всеки тип можеш да го пляснеш където искаш и да го предаваш както искаш според случая, но определено може ако ти е важно
BIGBUGEX
Създадено на 05.07.2022, видяно: 745 пъти. #65276
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта. Но в такъв случай, извикващата функция е длъжна да алокира ново копие в стека и така да предаде указателя. Сиреч не се различава от предаване би вал.
The following keywords are used to declare reference types:
class
interface
delegate
record
C# also provides the following built-in reference types:
dynamic
object
string
ДонРеба
Създадено на 05.07.2022, видяно: 726 пъти. #65280
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта. Но в такъв случай, извикващата функция е длъжна да алокира ново копие в стека и така да предаде указателя. Сиреч не се различава от предаване би вал.
това което казваш ми се струва разумно само при конвенции в които предаването на параметрите е през регистри (мисля че 64 битовите компилатори са така), иначе е само едно излишно дереференсване
BIGBUGEX
Създадено на 05.07.2022, видяно: 710 пъти. #65286
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта. Но в такъв случай, извикващата функция е длъжна да алокира ново копие в стека и така да предаде указателя. Сиреч не се различава от предаване би вал.
това което казваш ми се струва разумно само при конвенции в които предаването на параметрите е през регистри (мисля че 64 битовите компилатори са така), иначе е само едно излишно дереференсване
Това беше валидно за 32 битов режим. Сега (в 64 битов режим) май всичко което е структура е с референция. Но не съм много сигурен.
Rabin
Създадено на 05.07.2022, видяно: 704 пъти. #65291
Ае неко ползва ли 32 битов режим като наш Жони?
И таа подарената бангия, и предишната бяха 64 битови. Само Наков е 126 битов, с 2 ракии Бургас 63 в джобовете.
Stilgar
Създадено на 05.07.2022, видяно: 690 пъти. #65295
В Джава, Ц шарп и всички останали изчадия с гарбидж колектър няма такива избори. Само най-простите елементарни типове могат да се предават като валю. Всичко останало е пойнтъри.
За C# това не е вярно, можеш да си сглобиш типове които се предават по value, можеш и да взимаш pointers към тях, дори някои дето по принцип ходят на хийпа можеш да ги накараш да се алокират на стека. Не е сравнимо със C++ където всеки тип можеш да го пляснеш където искаш и да го предаваш както искаш според случая, но определено може ако ти е важно
Хм аз останах с впечатлението че всичко що е клас и обект е референтен тип, т.е. указател.
The following keywords are used to declare reference types:
class
interface
delegate
record
C# also provides the following built-in reference types:
dynamic
object
string
Да, но освен reference types има и value types (декларират се със struct) и си конструираш каквито си искаш типове които по подразбиране се предават по стойност. Най-често срещаният такъв тип е DateTime. В добавка параметрите могат да са ref което ги прави да се предават по референция (демек указател към стека). Това може да се ползва и с value и с reference types например ако имаш m(ref List<string> strings) { strings = null; } и го викнеш като m(ref neshto) после нещото ще е null, а при същото нещо без ref няма да е null (List си е reference type, и по принцип си работи като в Java). Отделно от това има един keyword stackalloc който позволява да алокираш неща на стека, но си има списък от неща за които работи примерно за масиви и спанове не може да го ползваш за всеки тип дето ти хрумне. Отделно на всичко това C# има C++ режим в който имаш буквални указатели със синтаксис от C++, но за това ти трябва unsafe блок и по принцип се гледа с лошо око на употребата на това щото може да направиш C++ бели докато тея неща които изброих преди са направени safe и се разбират с GC-то и имат някакви ограничения все пак за да може да е сигурно че няма да се лийква памет и прочие
Да, но освен reference types има и value types (декларират се със struct) и си конструираш каквито си искаш типове които по подразбиране се предават по стойност. Най-често срещаният такъв тип е DateTime. В добавка параметрите могат да са ref което ги прави да се предават по референция (демек указател към стека). Това може да се ползва и с value и с reference types например ако имаш m(ref List<string> strings) { strings = null; } и го викнеш като m(ref neshto) после нещото ще е null, а при същото нещо без ref няма да е null (List си е reference type, и по принцип си работи като в Java). Отделно от това има един keyword stackalloc който позволява да алокираш неща на стека, но си има списък от неща за които работи примерно за масиви и спанове не може да го ползваш за всеки тип дето ти хрумне. Отделно на всичко това C# има C++ режим в който имаш буквални указатели със синтаксис от C++, но за това ти трябва unsafe блок и по принцип се гледа с лошо око на употребата на това щото може да направиш C++ бели докато тея неща които изброих преди са направени safe и се разбират с GC-то и имат някакви ограничения все пак за да може да е сигурно че няма да се лийква памет и прочие
Ок, прав си. Даже не знаех че ги има такива особенности, никога не са ми трябвали.
ДонРеба
Създадено на 05.07.2022, видяно: 665 пъти. #65298
Ае неко ползва ли 32 битов режим като наш Жони?
доста софтуер е 32 битов, 64 битов ти трябва само ако работиш с огромни данни.
ДонРеба
Създадено на 05.07.2022, видяно: 664 пъти. #65299
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта. Но в такъв случай, извикващата функция е длъжна да алокира ново копие в стека и така да предаде указателя. Сиреч не се различава от предаване би вал.
това което казваш ми се струва разумно само при конвенции в които предаването на параметрите е през регистри (мисля че 64 битовите компилатори са така), иначе е само едно излишно дереференсване
Това беше валидно за 32 битов режим. Сега (в 64 битов режим) май всичко което е структура е с референция. Но не съм много сигурен.
аз 32 битовия cdecl навремето го знаех наизуст, защото ми трябваше, и нямам спомен да е така. само за резултата (ако е структура) беше както казваш. тия ниви обаче ги орях преди 15 години така че не си залагам главата
Евлампи
Създадено на 05.07.2022, видяно: 643 пъти. #65306
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта. Но в такъв случай, извикващата функция е длъжна да алокира ново копие в стека и така да предаде указателя. Сиреч не се различава от предаване би вал.
Пойтерите в цъ са разкошен пример за полезна илюзия, за разлика от псевдонимите в цеплюспляс които са от възможно най-лошите примери за вредна илюзия :)
Евлампи
Създадено на 05.07.2022, видяно: 641 пъти. #65307
Ок, прав си. Даже не знаех че ги има такива особенности, никога не са ми трябвали.
ОсобеНости. Иначе цъ шарп като изключим че заради маниакалната обсесия на 'лошите' микрософт за обратна съвместимост оставя впячатление за манджа с грозде, боза и люти чушки е много способен език, вероятно дори по-способен от цеплюспляс в ръцете на разбирач
Евлампи
Създадено на 05.07.2022, видяно: 639 пъти. #65308
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта
Цъ е много красива и също толкова много отровна змия, не е въпрос на дали а на кога ще ухапе и най-опитен змияр :)
ВСЯКО нещо което не е изрично гарантирано е undefined/implementation defined/compiler version/settings настройка.
Тоест почти всичко :)
Stilgar
Създадено на 05.07.2022, видяно: 632 пъти. #65313
Да, но освен reference types има и value types (декларират се със struct) и си конструираш каквито си искаш типове които по подразбиране се предават по стойност. Най-често срещаният такъв тип е DateTime. В добавка параметрите могат да са ref което ги прави да се предават по референция (демек указател към стека). Това може да се ползва и с value и с reference types например ако имаш m(ref List<string> strings) { strings = null; } и го викнеш като m(ref neshto) после нещото ще е null, а при същото нещо без ref няма да е null (List си е reference type, и по принцип си работи като в Java). Отделно от това има един keyword stackalloc който позволява да алокираш неща на стека, но си има списък от неща за които работи примерно за масиви и спанове не може да го ползваш за всеки тип дето ти хрумне. Отделно на всичко това C# има C++ режим в който имаш буквални указатели със синтаксис от C++, но за това ти трябва unsafe блок и по принцип се гледа с лошо око на употребата на това щото може да направиш C++ бели докато тея неща които изброих преди са направени safe и се разбират с GC-то и имат някакви ограничения все пак за да може да е сигурно че няма да се лийква памет и прочие
Ок, прав си. Даже не знаех че ги има такива особенности, никога не са ми трябвали.
По принцип тея неща не трябват на нас простосмъртните трябват на хората дето пишат игри на unity и на онея дето пишат примерно самото ASP.NET и си мерят там колко милиона заявки в секунда обработват за да върнат Hello World по HTTP
BIGBUGEX
Създадено на 06.07.2022, видяно: 628 пъти. #65314
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта
Цъ е много красива и също толкова много отровна змия, не е въпрос на дали а на кога ще ухапе и най-опитен змияр :)
ВСЯКО нещо което не е изрично гарантирано е undefined/implementation defined/compiler version/settings настройка.
Тоест почти всичко :)
Опитния змияр знае, че implementation defined означава пътя на най-малкото съпротивление за съответната архитектура. Ако познаваш хардуера undefined си е съвсем defined.
Но да се върнем на военната операция. Едно птиченце (Данчо Шорта) ми каза, че войната свърши и Рассия победи. И форумните либерасти нещо заглъхнаха. Което е добре. Значи скоро ще ходя да троля Асен Генов из коментарите на Контракоментар (щото ме е баннал в чата).
ДонРеба
Създадено на 06.07.2022, видяно: 620 пъти. #65316
тя войната още не е почнала, а ти - свърши. като свърши наистина, няма да има нужда да тролиш либерастите, те ще си режат сами вените
bobyb
Последно редактирано на 06.07.2022 от bobyb, видяно: 611 пъти. #65320
И двете сте прави. В С++ се предава като указател всяка структура над 8 байта
Цъ е много красива и също толкова много отровна змия, не е въпрос на дали а на кога ще ухапе и най-опитен змияр :)
ВСЯКО нещо което не е изрично гарантирано е undefined/implementation defined/compiler version/settings настройка.
Тоест почти всичко :)
Опитния змияр знае, че implementation defined означава пътя на най-малкото съпротивление за съответната архитектура. Ако познаваш хардуера undefined си е съвсем defined.
Но да се върнем на военната операция. Едно птиченце (Данчо Шорта) ми каза, че войната свърши и Рассия победи. И форумните либерасти нещо заглъхнаха. Което е добре. Значи скоро ще ходя да троля Асен Генов из коментарите на Контракоментар (щото ме е баннал в чата).
Така ли стана? Освободиха ли вече Донбас или каквото е останало от него?
тя войната още не е почнала, а ти - свърши. като свърши наистина, няма да има нужда да тролиш либерастите, те ще си режат сами вените
Истинският либераст ще твърди че рассия е загубила позорно войната дори и в момента под прозореца му да има парад на червената армия.
Важна е "моралната победа"! 😏
Едно време като ни четоха "Балканджи Йово" ни обясняваха как балканджията без ръце, крака и очи е "моралният победител", а турците дето са взели сестра му да я ебат са "моралните загубеняци".
Както е казал Валентин Вацев:
"Малки сме и не ги разбираме тея неща!"
ДонРеба
Създадено на 06.07.2022, видяно: 586 пъти. #65326
тя войната още не е почнала, а ти - свърши. като свърши наистина, няма да има нужда да тролиш либерастите, те ще си режат сами вените
Истинският либераст ще твърди че рассия е загубила позорно войната дори и в момента под прозореца му да има парад на червената армия.
чак толкова истински няма, може би само краси гегов го умее това