Paras vastaus
Suoritettava kannettava
Portable Executable -muoto on tiedostomuoto suoritettaville tiedostoille, objektikoodille, DLL-tiedostoille, FON Font-tiedostoille ja muille, joita käytetään 32- ja 64-bittisissä Windows-käyttöjärjestelmissä. PE-muoto on tietorakenne, joka kapseloi tiedot, joita Windows OS-latauslaite tarvitsee käärityn suoritettavan koodin hallitsemiseksi.
Tämä sisältää dynaamisia kirjastoviittauksia linkittämistä varten, API-vienti- ja tuontitaulukoita, resurssienhallintatietoja ja ketjua. – paikallisen tallennuksen (TLS) tiedot. NT-käyttöjärjestelmissä PE-muotoa käytetään EXE: lle, DLL: lle, SYS: lle (laiteajuri) ja muille tiedostotyypeille. EFI (Extensible Firmware Interface) -määrittelyn mukaan PE on vakio suoritettava muoto EFI-ympäristöissä.
Answer
C-lähdekoodin siirrettävyys tarkoittaa, että niin kauan kuin haluamasi kohdealusta on toimiva C-kääntäjä käytettävissä, voit siirtää C-lähdekoodisi kohdealustalle kääntämällä sen uudelleen ilman, että sinun tarvitsee muokata sitä. Koska melkein jokaisella kohdealustalla on käytettävissä C-kääntäjä, C: tä pidetään erittäin kannettavana ohjelmointikielenä.
Siitä huolimatta, yksinkertaisesti koodin kirjoittaminen C: ksi tekee ei takaa siirrettävyyttä. Sinun on harjoitettava kurinalaisuutta välttääksesi kannettavan koodin kirjoittamista. Esimerkiksi koodin kirjoittaminen, joka suorittaa jonkin seuraavista, johtaa ei-kannettavaan koodiin:
- Olettaa minkä tahansa tietotyypin koosta, paitsi char.
- Tekee oletuksia siitä, miten data kohdistetaan muistiin ja rakenteisiin.
- Tehdään oletuksia siitä, miten data pakataan / täytetään rakenteisiin.
- Tehdään oletuksia tavujärjestyksestä (iso endiani tai pieni endiaani) .
- Käyttää epätyypillistä kääntäjän laajennusta, joka ei välttämättä ole käytettävissä kaikissa kääntäjän toteutuksissa.
- Käyttää epätyypillistä kirjastolaajennusta, joka ei ehkä ole käytettävissä kaikilla alustoilla.
- Perustuu mihin tahansa toteutuksen määrittelemään käyttäytymiseen, joka voi toimia eri tavalla eri kääntäjän toteutuksessa.
- Sisältää kaikki määrittelemättömät toiminnot, jotka saattavat näyttää toimivan yhdessä ympäristössä, mutta voi käyttäytyä arvaamattomasti toisessa ympäristössä.
- Suorittaa kaikki sovellusliittymän (sovellusohjelmointirajapinnan) puhelut käyttöjärjestelmälle järjestelmä, joka ei välttämättä ole käytettävissä kaikissa ympäristöissä.
- Tekee oletuksia tietyistä muistiosoitteista (esim. että tietty muistiosoite on yhdistetty laitteistorekisteriin jne.).
- Tehdään oletuksia osoittimen koosta tai siitä, että osoitin on saman kokoinen kuin int.
- Tehdään oletuksia argumenttien välittämisestä (pinossa tai tietyissä rekistereissä).
- Sisältää minkä tahansa sisäisen kokoonpanokielen lähdekoodin.
- Käyttää C-kielen uusinta ja suurinta ominaisuutta, jota jotkin kääntäjän toteutukset eivät vielä tue (ja joissain tapauksissa niitä ei ehkä koskaan tueta) tuettu).
- Luottaa kirjastoon, joka suorittaa jonkin yllä olevista.
Tämä ei ole tyhjentävä luettelo.
Jos voit Älä vältä ei-kannettavan koodin käyttöä, joten parasta on eristää kyseinen ei-kannettava koodi erilliseen lähdetiedostoon. Sitten, kun sinun on siirrettävä koodi uudelle kohdealustalle, on hyvin selvää, mitä lähdekoodin osajoukkoa on muokattava.