Opzione compilazione record field alignment

di il
5 risposte

Opzione compilazione record field alignment

Ciao nuovamente,

ennesimo problema :)

ho una applicazione che nelle opzioni di compilazione ha come record field alignmente iompostata a quad bye, immagino opzione di deault.

Ho dovuto aggiungere quella famosa dll scritta in c di cui parlavo qualche post fa e che ero riuscito a far funzionare, il problema è che per far funzionare quella dll in modo corretto, ho notato devo compilare in “byte” e non in quad word, ma cosi facendo mi trovo altri problemi nell'applicazione in generale.

La domanda è…. posso copilare il  progetto lasciando quad word, ma compilare in byte solo quella unit che mi serve per usare la dll?

ho provato ad inserire  la direttiva  {$ALIGN 2} dove vengono dichirati i record, ma non risolvo, sapet se si puo' fare?

grazie mille

5 Risposte

  • Re: Opzione compilazione record field alignment

    26/04/2023 - ziobacco ha scritto:


    La domanda è…. posso copilare il  progetto lasciando quad word, ma compilare in byte solo quella unit che mi serve per usare la dll?

    Quando compili il progetto, tutto ciò che è contenuto nelle unit viene preso e unito all'interno di un unico “calderone” che è il file eseguibile, avendo cura (grazie all'ottimizzazione del compiler) di prendere solo quello che realmente serve.

    Nel caso in esame, quella unit fondamentalmente importa funzioni che devono essere usate anche nel resto del programma, quindi non può essere considerata un elemento distinto e separato dal resto, e dubito fortemente che si possa scegliere per essa una politica differente da quella applicata alle altre unit con le quali questa condivide informazioni, altrimenti ci sarebbe una difformità nel modo in cui determinate strutture dati vengono considerate dall'una o dall'altra unit.

  • Re: Opzione compilazione record field alignment

    Ok credo di aver risolto, mi mancava in pratica di “abilitare” la modifica credo,

    aggiungendo  

    {$Align On}
    {$ALIGN 1}

    al file interessato sembra funzionare.

  • Re: Opzione compilazione record field alignment

    26/04/2023 - ziobacco ha scritto:


    Ok credo di aver risolto, mi mancava in pratica di “abilitare” la modifica credo,

    Direi che hai specificato due opzioni che sono in contraddizione tra loro.

    La direttiva {$Align On}, che rappresenta il default, indica che l'allineamento è attivo, ovvero i record occupano più spazio (più byte) rispetto al tipo di dato specifico, per ottimizzare le performance.

    Se indichi l'opzione {$ALIGN 1}, stai richiedendo un allineamento al byte, ovvero stai disattivando l'allineamento, nella pratica tutti i record è come se fossero stati definiti con l'opzione packed.

    Al posto di {$Align On}, dovrebbe essere sufficiente usare {$Align Off} per disattivare l'allineamento (e quindi si arrotonda al byte, che ha lo stesso effetto di {$ALIGN 1}).

    Tieni conto che l'opzione di allineamento ({$Align On}) è attiva per default.

  • Re: Opzione compilazione record field alignment

    Ciao Marco, ho letto la tua risposta, pero'  ho fatto un po di prove ma non mi torna qualcosa,

    Ora ho fatto come hai detto tu e ho messo solo {$Align Off}  e in effetti sembra funzionare anche cosi',non capisco alora come mai non mi funzionava solo con {$ALIGN 1},ma mettendo anche {$Align On} insieme invece sembra andare, da quello che mi dici invece non avrebbe dovuto, giusto?.

    Cmq se basta mettere  {$Align Off} , lascio solo quello, ti ingrazio come sempre ^_^

  • Re: Opzione compilazione record field alignment

    26/04/2023 - ziobacco ha scritto:


    Ora ho fatto come hai detto tu e ho messo solo {$Align Off}  e in effetti sembra funzionare anche cosi',non capisco alora come mai non mi funzionava solo con {$ALIGN 1},ma mettendo anche {$Align On} insieme invece sembra andare, da quello che mi dici invece non avrebbe dovuto, giusto?.

    Non saprei, anche perché non ho modo di vedere il codice nella sua interezza, e quindi non ho la possibilità di capire se c'è qualche altro fattore o porzione di codice che influenza questa impostazione. :|

Devi accedere o registrarti per scrivere nel forum
5 risposte