abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 10:40 | Zajímavý článek

Lukáš Růžička se v článku Workrave ve Fedoře aneb jak si nevytunelovat karpál na MojeFedora.cz věnuje aplikaci Workrave (Wikipedie) na sledování času stráveného na počítači, která může pomoci vyhnout se negativním účinkům práce s počítačem (RSI, CTS), nebo je alespoň výrazně zmírnit.

Ladislav Hagara | Komentářů: 0
dnes 10:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Shadow Warrior: Special Edition běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
včera 23:11 | Nová verze

Byla vydána verze 2.4.0 analyzátoru síťového provozu Wireshark. Jedná se o první stabilní verzi nové řady 2.4. Podrobný přehled novinek v poznámkách k vydání. V červnu proběhla konference SharkFest’17 US věnovaná Wiresharku. Záznamy přednášek jsou k dispozici na YouTube.

Ladislav Hagara | Komentářů: 0
včera 13:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřeného přístupu na 142. brněnský sraz, který proběhne v pátek 21. července od 18:00 hodin ve Sport Centru Srbská (Srbská 4). Od 19:00 je pro zájemce zamluveno hřiště na plážový volejbal.

Ladislav Hagara | Komentářů: 0
včera 12:34 | Bezpečnostní upozornění

V GNOME Soubory, původně Nautilus, konkrétně v generování náhledů exe, msi, dll a lnk souborů byla nalezena a opravena bezpečnostní chyba CVE-2017-11421 s názvem Bad Taste. Při otevření složky obsahující tyto soubory může být spuštěn VBScript obsažen v názvech těchto souborů.

Ladislav Hagara | Komentářů: 2
včera 11:00 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 308 bezpečnostních chyb. V Oracle Java SE je například opraveno 32 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 28 z nich. V Oracle MySQL je opraveno 30 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 9 z nich.

Ladislav Hagara | Komentářů: 0
včera 01:00 | Komunita

Mark Krenz, známý svým twitterovým účtem @climagic (Command Line Magic), kde ukazuje, co vše a jak lze dělat v příkazovém řádku, přednášel včera v Praze. Záznam přednášky je k dispozici na YouTube.

Ladislav Hagara | Komentářů: 0
19.7. 10:00 | Nová verze

Microsoft vydal Skype pro Linux ve verzi 5.4 Beta. Nejnovější Skype pro Linux je postaven na frameworku Electron 1.7.4 a přináší skupinové videohovory.

Ladislav Hagara | Komentářů: 11
19.7. 06:00 | Nová verze

Werner Koch, zakladatel a hlavní vývojář GnuPG, oznámil vydání verze 1.8.0 svobodné kryptografické knihovny Libgcrypt. Jedná se o první stabilní verzi nové řady 1.8. Ta je API i ABI kompatibilní s řadou 1.7. Z novinek vývojáři zdůrazňují podporu kryptografických hašovacích funkcí Blake2 (Wikpedie), šifrovací mód XTS nebo zvýšení výkonu na architektuře ARM.

Ladislav Hagara | Komentářů: 0
18.7. 15:55 | Zajímavý projekt

Stefan Vorkoetter představil na svých stránkách DIY tablet s Raspberry Pi 3 Model B. Z Raspberry Pi odstranil USB porty, ethernetový port i GPIO konektor. Použil oficiální sedmipalcový dotykový displej s rozlišením 800x480 pixelů. Hmotnost tabletu je 484  g.

Ladislav Hagara | Komentářů: 6
Chystáte se pořídit CPU AMD Ryzen?
 (7%)
 (31%)
 (1%)
 (10%)
 (43%)
 (8%)
Celkem 1028 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: vyznam aligned v C

    4.10.2010 00:09 honza
    vyznam aligned v C
    Přečteno: 590×
    Zdravim, Cital som o atribute aligned v C a chcem sa uistit ze to chapem spravne, pretoze moje pokusy to nenaznacuju. Tento atribut by mal zarovnavat hodnoty struktur alebo jednotlivych premennych na zadany pocet bytov. Pr: int i __attribute__((aligned(128))); printf("%d", sizeof(i)); prikaz printf by mal vypisat velkost 128, ale vypise 4!

    Řešení dotazu:


    Odpovědi

    4.10.2010 01:22 Jirka P
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Alignment určuje zarovnání, ne velikost (toho, co se zarovnává), Prakticky bys to ověřil takto:
    int i __attribute__((aligned(128)));
    assert((intptr_t)&i % 128 == 0);
    Je samozřejmě možné, že použití aligned "něco" zvětší (strukturu obsahující daný prvek, nebo spotřebu zásobníku), ale není to nezbytně nutné.
    4.10.2010 12:22 kulik
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    To by jeste schazelo, aby mel najednou integer 128 bajtu:-) Podivej se treba na wikipedii, tam je to dobre vysvetlene.
    4.10.2010 21:08 honza
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Tak ze, ak tomu spravne chapem, tak pouziva sa to za zarovnanie adries na ktorych lezia v pamati hodnoy aby boli delitelne cislom ktorym zarovnavam bezozvysku.

    tak ze toto:
    
    int main(void)
    {
        static float a[4] __attribute__((aligned(128))) = {1.0, 2.0, 3.0, 4.0};
        printf("%8u %8u %8u %8u\n", &a[0], &a[1], &a[2], &a[3]);
        return 0;
    }
    
    vypise takyto vysledok: 268509056 268509060 268509064 268509068 Prva adresa je dlitelna 128 bezozvysku, ale druha, tretia a stvrta adresa uz nie. Cize prva adresa aj u viacrozmernych poli bude delitelna bezozvysku cislom ktorym zarovnavam. Ale preco tato struktura ma velkost 32:
    
    struct {
        char a;
        int c __attribute__ ((aligned (16)));
        char b;
    }
    
    4.10.2010 22:25 mato
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    caf,

    zarovnava celu strukturu na najmensi spolocny nasobok .. ak to spravne teda pomenuvavam ..

    ked to rozoberes:
    
    char a;   // 2B
    int c;    // 16B
    char b;   // 2B , dokopy 18B  
    
    zarovnavam na nasobky 16, tj 32 je najblizsi nasobok 16, kde (2+16+2) < 32 .. neviem ci sa to da chapat, co pisem .. :)
    4.10.2010 22:42 Jirka P
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    static float a[4] __attribute__((aligned(128)));
    Prva adresa je dlitelna 128 bezozvysku, ale druha, tretia a stvrta adresa uz nie.
    To není překvapení, ten atribut se týká celého pole. Tzn. adresa pole je zarovnaná, pole jsou v C vždy "packed" (tedy je-li T* p, platí (char*)(p+1)-(char*)p==sizeof(T)).
    Ale preco tato struktura ma velkost 32:
    Představ si, že chceš udělat pole tvých struktur. Potom (intptr_t)&array[0].c % 16 == 0, stejně tak (intptr_t)&array[1].c % 16 == 0. To znamená, že i ((char*)&array[1].c-(char*)&array[0].c) % 16 == 0 == sizeof(struct...) % 16, z toho vyplývá, že velikost té struktury je dělitelná 16. No a 16 to být nemůže, protože c musí být v paměti za a (a z implementačních důvodů nelze mít celou strukturu zarovnanou např. na adresy -1 mod 16, takže a bude taky zarovnané aspoň na 16).

    Prakticky ta struktura vypadá takto:
    1 byte   a
    15 byte  - nic
    4 byte   c
    1 byte   b
    11 byte  - nic
    
    5.10.2010 06:41 honza
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Ok tomu rozumiem, a bude lezat na nasobku 16-ky za nim c tiez na nasobku 16-ky, potom b, ale nechapem tych 11 byte ak ta struktura nebude v poli. nemal by to kompilator rozozna pri preklade a malo by stacit na nu 21 byte?
    5.10.2010 08:50 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Mělo by mu stačit 21, vše záleží zda další proměnnou zarovná na nějaký násobek, nebo nezarovná a bude hned za tou zarovnanou.

    Já bych se tímto nezabýval, zarovnání má hlavně vliv kvůli CPU které třeba v jednom taktu může tu proměnnou přečíst, když nebude zarovnaná spotřebuje CPU taktů víc.

    O správné zarovnání se stará sám překladač podle nastavených optimalizací a netřeba do toho zasahovat pokud nepotřebuješ k datům přistupovat přímo.

    Vaše zarovnání:
        .file    "pokus.c"
        .section    .rodata
    .LC0:
        .string    "%8u %8u %8u %8u\n"
        .text
    .globl main
        .type    main, @function
    main:
    .LFB0:
        .cfi_startproc
        pushq    %rbp
        .cfi_def_cfa_offset 16
        movq    %rsp, %rbp
        .cfi_offset 6, -16
        .cfi_def_cfa_register 6
        movl    $.LC0, %eax
        movl    $a.2051+12, %r8d
        movl    $a.2051+8, %ecx
        movl    $a.2051+4, %edx
        movl    $a.2051, %esi
        movq    %rax, %rdi
        movl    $0, %eax
        call    printf
        movl    $0, %eax
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
    .LFE0:
        .size    main, .-main
        .data
        .align 128
        .type    a.2051, @object
        .size    a.2051, 16
    a.2051:
        .long    1065353216
        .long    1073741824
        .long    1077936128
        .long    1082130432
        .ident    "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)"
        .section    .note.GNU-stack,"",@progbits
    
    a když to necháte na překladači:
        .file    "pokus.c"
        .section    .rodata
    .LC0:
        .string    "%8u %8u %8u %8u\n"
        .text
    .globl main
        .type    main, @function
    main:
    .LFB0:
        .cfi_startproc
        pushq    %rbp
        .cfi_def_cfa_offset 16
        movq    %rsp, %rbp
        .cfi_offset 6, -16
        .cfi_def_cfa_register 6
        movl    $.LC0, %eax
        movl    $a.2051+12, %r8d
        movl    $a.2051+8, %ecx
        movl    $a.2051+4, %edx
        movl    $a.2051, %esi
        movq    %rax, %rdi
        movl    $0, %eax
        call    printf
        movl    $0, %eax
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
    .LFE0:
        .size    main, .-main
        .data
        .align 16
        .type    a.2051, @object
        .size    a.2051, 16
    a.2051:
        .long    1065353216
        .long    1073741824
        .long    1077936128
        .long    1082130432
        .ident    "GCC: (GNU) 4.4.4 20100630 (Red Hat 4.4.4-10)"
        .section    .note.GNU-stack,"",@progbits
    
    5.10.2010 12:34 Jirka P
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Ne, to by bylo prakticky nemožné. Každý typ, který může mít nějaká proměnná, může být typem prvku pole. A kompilátor by musel projít celý kód (=všechny zdrojáky, které se linkují do výsledné binárky, včetně dynamických knihoven), aby mohl zjistit, že daná struktura opravdu prvkem pole není (což v sobě obsahuje např. i použití pointrové aritmetiky na jejím typu).

    Spíš uvidíš optimalizaci typu "kašlem na strukturu, na zásobník (nebo do registrů) to nějak naboucháme", kterou kompilátor může udělat, pokud daná instance té struktury neprosákne někam ven z funkce (přes pointer). Pak ta struktura na zásobníku zabere méně než 32 bytů, ale sizeof bude pořád 32.
    5.10.2010 20:46 honza
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Ale ked mam jednoduchy program, kde zadefinujem strukturu, tak by to prekladac mohol vediet, ze som nezadefinoval ziadne pole konkretnych sruktur.
    5.10.2010 21:13 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    To by mohl předpokládat tehdy, pokud se tam neobjeví ukazatel na tuhle strukturu. A jelikož to je v Céčkových programech poměrně řídký jev (že nějaký datový typ není vůbec použit jako ukazatel), IMHO se to nebude nikomu chtít implementovat.
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    6.10.2010 08:21 timi
    Rozbalit Rozbalit vše Re: vyznam aligned v C
    Dakujem Vsetkym za zapojenie sa do diskusie a odpovede.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.