Войти
ФлеймФорумПрограммирование

Имеет ли смысл вводить следующие изменения в С? (11 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#150
23:25, 8 мая 2019

mr.DIMAS
> Есть минимальный пример такого поведения?
Тред перечитай что ли


#151
23:31, 8 мая 2019

1 frag / 2 deaths
Спрошу по-другому: есть код на котором можно проверить сие утверждение?

#152
(Правка: 23:41) 23:33, 8 мая 2019

1 frag / 2 deaths
> Это действительно не так работает у сишки под виндой. У языка, позиционирующего
> себя, как кроссплатфоремнный сисямблер.
Ну прекращай выдумывать. Под виндовсом и под линуксом используются несколько различные соглашения для 64 бит. Причем сейчас они позиционируются как универсальные внутри платформы. Т.е. типа их решили оставить всего два разных.

Я даже больше добавлю, любой язык которые будет принимать копию будет передавать указатель вне зависимости от сигнатуры или еще чего там, если он хочет работать в системе.

> при линковке другого языка с сишкой тебе придётся в сигнатуре прописывать
> указатель там, где сишка якобы обещает принять копию.
Опять фантазии, тебе просто придется выполнять соглашения о вызове. И если там сказано передавай указатель, тебе придется его передавать. На ожидаемое поведение это не влияет никак.

#153
23:54, 8 мая 2019

mr.DIMAS
> Спрошу по-другому: есть код на котором можно проверить сие утверждение?
Тред перечитай что ли.

exchg
> Опять фантазии, тебе просто придется выполнять соглашения о вызове. И если там
> сказано передавай указатель, тебе придется его передавать.
А если сказано передавать структуру, то мне придётся передавать указатель.

exchg
> Опять фантазии, тебе просто придется выполнять соглашения о вызове.
Не тупи, ведь если сказано передавать структуру, то мне придётся передавать указатель.

#154
0:16, 9 мая 2019

1 frag / 2 deaths
Нет примера - нет доказательств.

#155
0:17, 9 мая 2019

1 frag / 2 deaths
> А если сказано передавать структуру, то мне придётся передавать указатель.
Тебе сказано, что если у тебя структура не в первых рядах то передавай указатель в независимости от языка. Вот такую выдумали конвенцию. Ты то, на самом деле, даже не о Сишке как таковой бугуртиш.

> Не тупи, ведь если сказано передавать структуру, то мне придётся передавать
> указатель.
Ну не прикалывайся, у тебя есть конвенция о вызовах на 64 битных системах. Если ты ее придерживаешься ты должен передавать указатель (не всегда но в простейшем случае должен). И не важно на Си твой код или на паскале или на еще чем то.

#156
0:33, 9 мая 2019

mr.DIMAS
> Нет примера - нет доказательств.
Мне каждому обмороку повторять?

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

exchg
> Если ты ее придерживаешься ты должен передавать указатель
Даже если сишко говорит, что якобы ждёт целую структуру. Где близость к железу?!

#157
(Правка: 1:03) 1:02, 9 мая 2019

1 frag / 2 deaths
> Что значит передавай в независимости?
Это значит, что ты вот такой офигенный пишешь программу на модном языке для х86-64 то у тебя на выбор есть 3 общепринятых соглашения. Два для виндовс и один для линукс. И если ты хочешь что бы остальной мировой гавнокод работал с твоей прекрасной программой на современном языке ты должен соблюдать эти соглашения о вызовах. А эти соглашения говорят, что первые Х параметров передаются через регистры. Т.к. твоя структура в регистр не лезет, то храние ее где тебе удобно, а нам передай указатель на нее.

> Я линкую либу, написанную обмороками, неспособными пролистать тред, и программа
> падает, потому что оказывается, нельзя передавать структуру в функцию, которая
> якобы принимает структуру.
Как трудно жить...

> Даже если сишко говорит, что якобы ждёт целую структуру.
Даже если любой язык на котором написана либа ждет структуру и ждет ее по названным соглашениям, то передается указатель.

> Где близость к железу?!
Железо оперирует чем-то, что влазит по размеру в РОН. Если что-то туда не лезет то есть только один вариант - передавать адрес того места где лежит нечто большое. Так работает железо. А у вас в реальности как работает железо? И что должно являться близостью к нему? Пример приведи.

#158
7:28, 9 мая 2019

Вот почитать.
https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017
Википедия утверждает, что 64-х calling convention - единственная на Windows 64x, за исключением __vectorcall, который вроде как расширяет 64x calling convention.
https://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x… ng_convention

Я тред целиком читал. Видел звёздочки в выхлопе LLVM. Вроде, всё верно.
Близости к железу, вроде, не противоречит.
extern "C", кстати, тоже соблюдается.

#159
7:54, 9 мая 2019

Выхлоп LLVM с clang под Linux. Я в в llvm не разбираюсь. Расскажите мне, что тут происходит.

+ Показать

Собранное на Линуксе под винду.
clang hello.cpp -o hello.ll -S -emit-llvm -target x86_64-pc-windows

+ Показать

#160
8:29, 9 мая 2019

Кстати, с флагом -target i686-pc-windows звёздочки остаются.

Возвращаясь, к x86_64 под винду.
struct Petuh {
  int kresto;
  int problemi;
  int lalka;
};

extern "C" int kokoko(Petuh *petuh);

int main () {
  Petuh petuh;
  return kokoko(&petuh);
}

+ Показать

Сорян, но звёздочки - это точно показатель чего-то там?
Вот два выхлопа под винду я дал. Сам не понимаю, что там на llvm написано. Но они делают одно и то же, не?
Передаём по значению:

+ Показать

Передаём по указателю:
+ Показать

Вот ещё пример:
struct Petuh {
  int kresto;
  int problemi;
  int lalka;
};

extern "C" int kokoko(Petuh petuh);
extern "C" int kokoko2(Petuh *petuh);

int main () {
  Petuh petuh;
  kokoko(petuh);
  kokoko2(&petuh);
  return 0;
}
Выхлоп:

+ Показать

Ну и по поводу сишных сигнатур и звёздочек в LLVM. Всё так страшно да?

#161
8:45, 9 мая 2019

А смысл в такой конвенции? В любом случае структуру прийдется копировать. При передаче по значению - в стек, при этой хитрожопой конвенции хз куда и передавать на этот хз куда указатель. Профита 0, идеология языка как высокоуровневого ассемблера похерена

#162
(Правка: 9:13) 9:12, 9 мая 2019

Olaf85
> А смысл в такой конвенции? В любом случае структуру прийдется копировать. При
Глобально смысл в том что было 5 разных, а стало 2 ( на самом деле 3 потому что майкрософт)

> передаче по значению - в стек, при этой хитрожопой конвенции хз куда и
Передавать все туда же только адрес теперь сразу готов к употреблению, за счет того, что РОН стало больше.

> передавать на этот хз куда указатель. Профита 0, идеология языка как
Передать сразу через регистр быстрее чем вначале положить на стек, а потом поднять с него.

> высокоуровневого ассемблера похерена
Да где же? РОН стало больше их стали использовать интенсивней.

#163
9:13, 9 мая 2019

Ну, кстати, зачем так глубоко копать? Мастдай изначально требовал вызывать свое API "не по C правилам" - с очисткой стека самой процедурой (окромя, понятно, sprintf).

#164
9:19, 9 мая 2019

exchg
> Передать сразу через регистр быстрее чем вначале положить на стек, а потом
> поднять с него.
Нет. Потому что структуру сначало нужно копировать куда то. Ну а потом поднимать оттуда. То же самое.

Страницы: 18 9 10 11 12 13 Следующая »
ФлеймФорумПрограммирование