Bedste svar
Bærbar eksekverbar
Det bærbare eksekverbare format er et filformat til eksekverbare filer, objektkoder, DLLer, FON-skrifttypefiler og andre, der bruges i 32-bit og 64-bit versioner af Windows-operativsystemer. PE-formatet er en datastruktur, der indkapsler de oplysninger, der er nødvendige for, at Windows OS-loader kan styre den indpakkede eksekverbare kode.
Dette inkluderer dynamiske biblioteksreferencer til sammenkædning, API-eksport og importtabeller, ressourcestyringsdata og tråd -Lokal lager (TLS) data. På NT-operativsystemer bruges PE-formatet til EXE, DLL, SYS (enhedsdriver) og andre filtyper. EFI-specifikationen (Extensible Firmware Interface) angiver, at PE er det standardkørbare format i EFI-miljøer.
Svar
Bærbarhed af C-kildekode betyder, at så længe din ønskede målplatform er har en fungerende C-kompilator til rådighed, kan du flytte din C-kildekode, der er målrettet mod platform, ved at kompilere den uden at skulle ændre den. Fordi næsten alle målplatforme har en C-kompilator til rådighed, betragtes C som et meget bærbart programmeringssprog.
Når det er sagt, skriver man bare kode i C ikke garanterer bærbarhed. Du skal udøve disciplin for at undgå at skrive kode, der ikke er bærbar. For eksempel vil skrivning af kode, der gør et af følgende, resultere i ikke-bærbar kode:
- Giver antagelser om størrelser på alle datatyper, undtagen tegn.
- Gør antagelser om, hvordan data er justeret i hukommelsen og inden for strukturer.
- Gør antagelser om, hvordan data pakkes / polstres inden for strukturer.
- Giver antagelser om bytebestilling (stor endian vs lille endian) .
- Bruger en ikke-standard compiler-udvidelse, som muligvis ikke er tilgængelig på alle compiler-implementeringer.
- Bruger en ikke-standard biblioteksudvidelse, som muligvis ikke er tilgængelig på alle platforme.
- Er afhængig af enhver implementeringsdefineret adfærd, der kan fungere forskelligt i en anden implementering af compiler.
- Indeholder enhver udefineret adfærd, der muligvis ser ud til at arbejde i et miljø, men kan opføre sig uforudsigeligt i et andet miljø.
- Foretager ethvert API-opkald (applikationsprogrammeringsgrænseflade) til operativsystemet system, som muligvis ikke er tilgængeligt i alle miljøer.
- Giver antagelser om specifikke hukommelsesadresser (f.eks. at en bestemt hukommelsesadresse er tilknyttet et hardwareenhedsregister osv.).
- Gør antagelser om størrelsen på en markør, eller at en markør har samme størrelse som et int.
- Gør antagelser om, hvordan argumenter sendes (på stakken eller i bestemte registre).
- Indeholder kildekode til indbygget samlingssprog.
- Bruger en nyeste og bedste funktion i C-sproget, som muligvis endnu ikke understøttes af nogle compilerimplementeringer (og i nogle tilfælde måske aldrig understøttet).
- Stoler på et bibliotek, der gør noget af det ovenstående.
Dette er ikke en udtømmende liste.
Hvis du kan t undgå at bruge ikke-bærbar kode, så er dit bedste valg at isolere den ikke-bærbare kode i en separat kildefil. Derefter, når du har brug for at flytte koden til en ny målplatform, er det meget klart, hvilken delmængde af kildekoden der skal ændres.