Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 12. 11. 2011 19:28 — Editoval StupidMan (12. 11. 2011 19:32)

StupidMan
Příspěvky: 737
Reputace:   
 

informatika

Dobry vecer, nemohli byste mi prosim nekdo poradit, jakou funkci nebo kcemu slouzi knihovna, linker a lokater? Na googlu jsem neco nasel, ale moc jsem tomu nerozumel.

Offline

 

#2 13. 11. 2011 00:47 — Editoval frank_horrigan (13. 11. 2011 01:11)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: informatika

Zdar,

knihovna (předpokládám knihovna funkcí, napříkat CRT (C runtime library) je soubor defincií algoritmů, které po zavolání udělají nějakou akci (například vypočtou druhou odmocininu z intu, floatu, doublu, nebo long doublu (a pro každý druh argumentu musí být jiná funkce, ač dělá téměř totéž). Jiná funkce, resp rutina specifikuje, kdo odstraní argumenty volání ze zásobníku (_cdecl vs. _stdcall) například. Jiná funkce zjistí větší číslo se dvou předených jako argumenty, jiná funkce z knihovny zařídí, že se ti čísla převedou na řetězec (srovnej 205 jako int, '205' jako char a "205" jako řetězec - každý má jiný význam, nebo pošlou řetězec na obrazovku..... knihovních funkcí je několik tisíc).. atd.... Samozřejmě, knihovnu si můžeš napsat svojí vlastní, která bude mít vlastní funkce, a nebo použít předdefinovanou (prototypy těchto funkcí si includneš), nebo použiješ výtvor někoho jiného (do zdrojáku si hodíš například #pragma comment(lib, "mojeknihovna.lib") - pak budeš moci použít jiným programátorem vytvořenou knihovnu, například pomocí _declspec(dllimport) int _stdcall DejOsmdesatouTretiOdmocninu(long long  CISLO)..... Snad pochopitelné, co je to knihovna.. Pokud ne, zeptej se, čemu konkrétně nerozumíš, pokusím se na to zaměřit

linker je program, který udělá ze souborů, které vytvoří kompilátor (objektový kód), a připojených knihoven (.lib) spustitelný soubor (.exe), který ti provede operační systém,  a nebo sám procesor (to už záleží na tom, co v tom .exe je zakódováno).
Tedy když kompiluješ zdroják (což je textový soubor), tak ho proženeš kompilátorem, on vytvoří objektvý kód, nevěda nic o použitých knihovnách nebo volání funkcí, a potom následuje linkování (linkerem), který propojí objektový kód s kódem (předem zkompilovaných nebo tím, který vytoří kompilátor) knihovních funkcí

Lokater (asi locator?) příliš neznám, mám jen takový pocit, že to nějak souvisí se zaváděcí tabulkou spustitelného programu, který se snaží zavést svůj kód a své proměnné a stavy na předem definovanou adresu v paměti (pokud neřekneš jinak, tak 0x0400 0000,pokud se nepletu). Ovšem, pokud je tato adresa obsazená, program, nebo operační systém musí program relokovat, tedy umístit na jinou adresu do paměti, a díky tomu, že adresy volání funkcí jsou dány v programu relativně, tak přepočítat i nové adresy, kde se nachází jaké volání jaké funkce, nebo kde se nachází jaká proměnná.

EDIT: snad chápeš, co to je adresa zadaná relativně :)  (jenom příklad, velmi dadaisticky popsaný:

mějme kód:
int i1, i2, i3; //sizeof(int) = 16 bity
double d1, d2; // u doublů je to 64 bitů
char c1; // a chary jsou na 8 bitech

int main()
{
return 0; // nic program nedela
}

a máme: zaváděcí adresu programu 0x0400 0000 (kde je nějaká instrukce, "load"), a program ví, že první int bude začínat na +1 a končit na +4, druhý začínat na +5 a končit na +8, třetí +9/+12, pak doubly na adresách +12/+18, +19/+26, a nakonec char na +27

tedy víme, že adresy proměnných, kde je má procesor hledat budou: load na 0x4000 0000, první int začíná na 0x0400 0001, druhý na 0x04000 0005, třetí na 0x0400 0009, double bude na 0x04000 000C, a druhý double na 0x0400 0012.... teď si vezmi, kdyby adresa instrukce load nebyla 0x0400 0000, ale zavede se ti třeba na adresu 0xA45F FF00 - celé to budeš muset přepočítat (ty ne, ale zaváděcí kód programu) - to by mohl dělat locator, resp. relocater... aspoň já mám takovou představu, že to podobným způsobem funguje, ale nikdy jsem neslyšel o samostarném programu, kterému se říká "locator"


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#3 14. 11. 2011 00:34

StupidMan
Příspěvky: 737
Reputace:   
 

Re: informatika

neslo by to trochu zjednodusit? kdyz to tak ctu, tak je to skoro stejny jako na googlu:(

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson