Wpis z mikrobloga

#cpp #programowanie

Jak skleić kilka zmiennych typu bool w jedną typu char albo dłuższą?

bool* bo = new bool[10];
bo[0] = false;
bo[1] = true;
bo[2] = true;
bo[3] = true;
bo[4] = true;
bo[5] = true;
bo[8] = true;

Lub (lepiej)
Zapisać te zmienne do pliku bit po bicie a nie jedną na bajt.

Robiłem to pętlą i tak to wychodzi.

for(int x=0; x<3; x++) {
ofs.write((char*)(&bo[x]), sizeof(*bo));
}
  • 40
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • Doceń
  • 0
Tak tak, programisci obiektowi ktorzy do flipniecia bitu w rejestrze potrzebuja obiekt, kontener, i 200kb ramu. To przez was, nieuki, aplikacje zajmuja po 88777mb ramu.
@look997
@ChinskieArduino
@
  • Odpowiedz
  • 0
@ChinskieArduino linux kernel - rak kod. Dobre sobie. I dz iala stabilnie na miliardach urzadzen - od telefonow przez servery po desktopy.

Jezyk C jest najblizej zblizony do assemblera. Kazda inna implementacja obiektowa to wynaturzenie, patrzac ze strony procesora dodajace overhead pamieci i cyklow. Procesor nie ma instrukcji operujacych na obiektach, tylko na rejestrach i wskaznikach. Jedynie dla obiektowych programistow jest to +, bo pisze sie latwiej i szybciej.

Ale sorry, jakosc tego
  • Odpowiedz
@PeaK: Słyszałeś może o takim nowym wynalazku jak kompilatory optymalizujące? O wykonywaniu obliczeń w czasie kompilacji nawet nie pytam.

W sumie nie wiem czemu odpowiadam trollowi, ale proszę: w C++ tworzenie obiektów dla RAII jest darmowe. Jedyne co zapewniasz, to brak goto faila, albo wycieku zasobów.

A kernel linuksa ma w znaczącej większości kod dobrej jakości, ale mimo wszystko przez lata mieli trzy czy cztery różne implementacje linked listy, bo
  • Odpowiedz
  • 0
@KrzaQ2 nie slyszalem, wszystkie oprogramowanie pisze TYLKO w asm ( ͡° ͜ʖ ͡°) (taki zarcik, programuje w struct i w obiektach tez-zaleznie od potrzeb)

Ps. Na porownywaniu sposobow i poziomow optymalizacji i weryfikacji kodu wynikowego w ASM pewnie spedzilem z pol zycia ( ͡° ͜ʖ ͡°) i dalej nie wiem jak optymalizator mialby bezkosztowo zmapowac obiekt i jego metody, atrybuty na procesor dzialajacy
  • Odpowiedz
@PeaK: Akurat programiści w C++ często dbają o optymalizację i rezultat w ASM.

C++ jest właśnie językiem, który łączy ze sobą optymalizujących świrów i ludzi, którzy lubią myśleć abstrakcją + są "leniwi" w pozytywnym sensie.

Tak też np. język D się nie przyjął, ale Rust robi niezłe zamieszanie wśród tego targetu.
  • Odpowiedz
@PeaK: :)

Zauważ, że optymalność optymalnością, a rozwijanie i utrzymywanie kodu ? Dobrze napisany kod w assemblerze będzie szybszy niż dobrze napisany kod w C++, tylko trudniej ten dobry kod napisać, więc pisze się obiektowo w C++. Dlatego obiektowość masterrace. Wyobraź sobie projekt , który tworzy tysiąc programistów i jest pisany proceduralnie w C i ASM. Czort z naklepaniem, przyjdzie 100 bugów od klienta i rozkmina może potrwać tyle, że
  • Odpowiedz
@patrolez: @ChinskieArduino:

POD ŻADNYM POZOREM NIE UJMUJE JĘZYKOM OBIEKTOWYM - W PEWNYM USE CASE SĄ ONE PO PROSTU NIEZASTĄPIONE.
Sam często używam czegoś obiektowego do sklejenia czegoś na szybko, aby działało.

Z języków obiekowych, najbliżej procesora jeśli chodzi o semantykę jest chyba własnie C++ i w nim jest największe pole do popisu
  • Odpowiedz
@ChinskieArduino: Swoja droga taki maly hint - jesli piszecie w C++, a potrzebujecie zaimplementowac rzeczy ktorych uzywacie CZESTO a ktore maja duzy narzut procesora (bool_extract, linkedlist, cokolwiek innego co wyjdzie w perf counters) mozecie bardziej czasochlonna czesc napisac i zoptymalizowac w czystym C, i po prostu zlinkowac plik obiektowy ( ͡° ͜ʖ ͡°) Macie korzysci z obiektowki + korzysci z optymalizacji tego co zajmuje najwiecej czasu,
  • Odpowiedz
Dobrze napisany kod w assemblerze będzie szybszy niż dobrze napisany kod w C++,


@ChinskieArduino: Wydajność powinna być taka sama. Jak nie jest, a jest to krytyczna ścieżka, to coś robisz źle. Ponadto, wraz z ewolucją sprzętu i kompilatorów kod w języku wysokopoziomowym może być lepszy. Np. nawet najlepszy kod w asm mnożący macierze napisany pod procki z 2000 roku na dzisiejszych będzie działał tak sobie, podczas gdy kompilator języka wysokopoziomowego
  • Odpowiedz
@PeaK: linked list pisać w c? Pomijając już wątpliwy sens użycia tej struktury danych w ogóle, czemu?

w C masz po prostu nad tym ZNACZNIE większą kontrole.

Co takiego można zrobić w C, czego nie można zrobić w C++?
  • Odpowiedz
@PeaK: w nowoczesnym C++ aka C++14 wskaźniki możesz zostawić sobie tylko po to, aby w przypadku pisania na systemy wbudowane zaimplementować swoje rozwiązanie do zarządzania pamięcią poprzez przeciążenie operatorów new i delete lub/i przez zapewnienie własnych alokatorów.

Cała reszta "wskaźnikologii" jest ukryta pod koncepcją iteratorów oraz smart pointerów.
https://en.wikipedia.org/wiki/Smart_pointer
  • Odpowiedz
@PeaK: bzdura, porównaj sobie wydajność std::sort z qsort. Smieszne jest, że w 2017 roku ludzie dalej myślą, że c++ jest wolniejszy od c.
  • Odpowiedz
@PeaK: Obecnie piszę w Asm, C i C++ takze troche z tym wysokopoziomowym nie trafiłeś :P
Generalnie to zgadzam się z Tobą - poziom marnowania zasobów przez bardzo wysoki poziom abstrakcji osiągnął absurdalne poziom.
  • Odpowiedz