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 18:11 | Nová verze

    Programovací jazyk Python byl vydán v nové major verzi 3.14.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 2
    dnes 16:33 | IT novinky

    Bylo oznámeno, že Qualcomm kupuje Arduino. Současně byla představena nová deska Arduino UNO Q se dvěma čipy: MPU Qualcomm Dragonwing QRB2210, na kterém může běžet Linux, a MCU STM32U585 a vývojové prostředí Arduino App Lab.

    Ladislav Hagara | Komentářů: 1
    dnes 15:55 | Nová verze

    Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.14.0. Podrobný přehled novinek v changelogu. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.

    Ladislav Hagara | Komentářů: 0
    dnes 13:22 | Nová verze

    Byla vydána nová stabilní verze 6.10 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 23:55 | Komunita

    Ubuntu 26.04 LTS bude (𝕏) Resolute Raccoon (rezolutní mýval).

    Ladislav Hagara | Komentářů: 3
    včera 21:00 | Nová verze

    Netwide Assembler (NASM) byl vydán v nové major verzi 3.00. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    včera 20:11 | Komunita

    Linuxová distribuce Frugalware (Wikipedie) ke konci roku 2025 oficiálně končí.

    Ladislav Hagara | Komentářů: 0
    včera 17:22 | Nová verze

    Byla vydána nová verze 3.0.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP bude brzy k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | IT novinky

    Americký výrobce čipů AMD uzavřel s americkou společností OpenAI smlouvu na několikaleté dodávky vyspělých mikročipů pro umělou inteligenci (AI). Součástí dohody je i předkupní právo OpenAI na přibližně desetiprocentní podíl v AMD.

    Ladislav Hagara | Komentářů: 1
    včera 12:22 | Nová verze Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (39%)
     (46%)
     (15%)
     (17%)
     (21%)
     (15%)
     (18%)
     (16%)
     (16%)
    Celkem 190 hlasů
     Komentářů: 12, poslední 4.10. 20:35
    Rozcestník

    Dotaz: posix_memalign - segmentation fault při přístupu ke korektně alokované paměti

    29.10.2010 10:35 vencas | skóre: 32
    posix_memalign - segmentation fault při přístupu ke korektně alokované paměti
    Přečteno: 126×

    Zdravím, chci alokovat paměť zarovnanou na cache line size, používám k tomu posix_memalign. Někdy však dojde k tomu, že přístup k části paměti, která alokovaná je, selže. Ukazuje to následující program (povinný argv[1] je kolikrát spustit alokaci):

    #include<stdlib.h>
    #include<stdio.h>

    int main(int argc, char** argv){
    int n=atoi(argv[1]), i, value;
    for(i=0; i<n; i++){
    int* addr;
    int succ=posix_memalign((void**)&(addr),64,64);
    if(succ!=0) { fprintf(stderr,"Allocation error."); return 1; }
    value=*(int*)(addr+(64-sizeof(int)));
    // fprintf(stderr,"%p:%d\n",addr,value);
    }
    }

    Jestli tomu správně rozumím, tak posix_memalign by mělo alokovat 64b paměti zarovnaných na 64b. Pokusím se potom přistoupit ke konci alokovaného kusu přes *(int*)(addr+64-sizeof(int)), což by mělo vzít konec alokovaného úseku jako int.

    Bohužel když program pustím, tak při větším poštu cyklů (argv[1]) se vyseká se segmentation fault. Vyzkoušel jsem, že pomůže alokovat větší množství pamětí (např. 96, třetí argument posix_memalign), ale nerozumím proč to tak je.

    Poradí mi někdo v čem je problém?

    Díky moc. Venca


    Řešení dotazu:


    Odpovědi

    29.10.2010 11:11 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: posix_memalign - segmentation fault při přístupu ke korektně alokované paměti
    Vyřešeno, odpovídám si sám. Problém je v tom, že pointer aritmetika má jako jednotku velikost typu; addr je int*, takže addr+1 dá adresu (void*)addr+1*sizeof(int).

    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.