+ All Categories
Home > Documents > Tomáš Oberhuber - cvut.cz

Tomáš Oberhuber - cvut.cz

Date post: 16-Nov-2021
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
49
Tomáš Oberhuber Softwarový projekt Programovací jazyky v z/OS Vyvtvoˇ rení spustitelného kódu Moduly Programování v C/C++ v z/OS rekladaˇ c C/C++ Linkování program ˚ u Spušt ˇ ení programu v TSO/E Použití katalo- govaných proced ˚ ur Optimalizace ri programování v C/C++ Práce se Tomáš Oberhuber Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague
Transcript
Page 1: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Tomáš Oberhuber

Faculty of Nuclear Sciences and Physical EngineeringCzech Technical University in Prague

Page 2: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Programování v z/OS1 Softwarový projekt

2 Programovací jazyky v z/OS

3 Vyvtvorení spustitelného kódu

4 Moduly

5 Programování v C/C++ v z/OS

6 Prekladac C/C++

7 Linkování programu

8 Spuštení programu v TSO/E

9 Použití katalogovaných procedur

10 Optimalizace pri programování v C/C++

11 Práce se soubory v C/C++

Page 3: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Softwarový projekt

(7. kapitola v Introduction to the New Mainframe)

• návrh aplikace• vývoj a testování• postupné nasazování, casto v soubehu s puvodním

systémem

Page 4: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Programovací jazyky v z/OS

• Assembler• umožnuje kontrolu nad kódem na úrovni bitu/bytu• vhodný pro psaní subrutin volaných z jiných jazyku• z/OS je napsaný v assembleru

Page 5: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Programovací jazyky v z/OS

• COBOL - Common Bussines-Oriented Language• PL/I• C/C++• Java• CLIST

• obdoba shellových skriptu• prakticky se ale napoužívá, nahrazuje ho Rexx

• Rexx - Restructured Extended Executor

LANGUAGE ENVIRONMENT• systemové API použitelné ve všech jazycích

Page 6: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Vyvtvorení spustitelného kódu

• velké programy se delí na menší logické celky - moduly• v C++ vetšinou jednu trídu implementujeme v jednom

souboru• z jednoho souboru mužeme volat funkce nebo metody

implementované nekde jinde jejichž kód není známý

Page 7: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Vyvtvorení spustitelného kódu

Pro urychlení vytvárení spustitelného kódu se procesprekladu delí na nekolik kroku:

• Preprocessing/prekompilace• Kompilace• Linkování• Spuštení programu

Page 8: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Preprocesing/prekompilace

• jde o zpracování maker preprocesoru #include, #define• pri programování se subsytémy CICS (transkace),

DB2(databáze) se nepoužívají funkce ale makra• EXEC SQL ...

• to je stejné i v Unixu nebo ve Windows

Page 9: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Kompilace

• zdrojový kód zpracovaný preprocesorem se predáprekladaci

• ten vytvárí strojový kód tzv. object modul - ten ještenelze spouštet

• prekladac nezná kód ani adresu funkcíimplementovaných v jiných modulech

• místo toho si poznamená pouze jméno volané funkce -symbolický odkaz

• nahrazení symbolických odkazu je práce pro linker(binder)

Page 10: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Linkování

• linkování provádí tzv. LINKER, mainframe používá i tzv.BINDER

• binder je "modernejší" - umožnuje napr. uložit výstupdo PDSE

• linker potom bere všechny objektové moduly anahrazuje symbolické odkazy skoky na skutecnéadresy nebo vloží patricný binární kód

• to, co delá linker se nekdy muže provádet za choduprogramu, kdy objektový modul linkuje dynamicky - DLL

Page 11: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Spoušt’ení programu

• dríve obstarával tzv. BATCH LOADER• dnes je nahrazen BINDERem• nacítá dané moduly do VIRTUAL STORAGE a spouští

je

Page 12: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Moduly

• ukládájí se do PDS, tím dostáváme knihovnu• zdrojové texty - SOURCE (MODUL) LIBRARY• objektové moduly - OBJECT (MODUL) LIBRARY• spustitelné programy - LOAD (MODUL) LIBRARY

Page 13: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Programování v C/C++ v z/OS

Je nekolik zpusobu, jak prekládat a linkovat programy vC/C++

• v závislosti na adresování 16. bitové, 31. bitové a 64.bitové

• s využítím IPA = Interprocedural Analysis• prekladac bežne provádí jen optimalizace na úrovni

jednotlivých procedur• pomocí parametru IPA(NOLINK) provede prekladac

první fázi prekladu, kdy do výsledného kódu prídádodatecné informace

• druhá fáze se volá s parametrem IPA(LINK), kdy dojdek samotnému provedení optimalizací

• s využitím XPLINK = Extra Performance Linking• jde o optimalizaci pro rychlé volání funkcí

Page 14: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++

//OBETO80J JOB (90300000),’OBETO80’,CLASS=A,REGION=48M,// MSGLEVEL=(1,1),MSGCLASS=H,NOTIFY=&SYSUID// JCLLIB ORDER=(CEE.SCEEPROC,CBC.SCBCPRC)//COMPILE EXEC PGM=CCNDRVR,// PARM=’/SEARCH(’’CEE.SCEEH.+’’) NOOPT SO OBJ LIST’//STEPLIB DD DSNAME=CEE.SCEERUN,DISP=SHR// DD DSNAME=CEE.SCEERUN2,DISP=SHR// DD DSNAME=CBC.SCCNCMP,DISP=SHR//SYSLIN DD DSNAME=OBETO80.INTRO.OBJ(HELLO),DISP=SHR//SYSPRINT DD SYSOUT=*//SYSIN DD DSNAME=OBETO80.INTRO.C(HELLO),DISP=SHR

Page 15: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++Prekladac pro C/C++ se jmenuje CCNDRVRParametry se predávají pomocí PARM:// PARM=’[run-time-options]/program-parameters’

• zdvojené ” se používá pro vložení apostrofu dopredávaného retezce

• SEARCH(”CEE.SCEEH.+”)• kde jsou uloženy hlavickové soubory - obdoba -I u gcc• LSEARCH se používá pro uživatelské hlavickové

soubory (ne systemové)• NOOPT - NOOPTMIZE/OPTIMIZE

• žádné optimalizace, jiná možnost je OPT(2) neboOPT(3) - použije se IPA

• SO - SOURCE/NOSOURCE• vypisuje zdrojový kód a nekteré diagnostické zprávy

• OBJ - OBJECT/NOOBJECT• zda se má vytváret object modul

• LIST - vypíše výsledný kód v assembleru

Page 16: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++

• DEBUG - preklad s informacemi pro ladení• ARCH - architektura

• 0 - spustitelné všude• 5 - na z/900

• CHECKOUT - varování pred možnými chybami v kódu• COMPACT - zmenšuje výsledný kód• DEFINE - definice pro preprocesor• DLL - generování DLL kódu• GOFF - Generalized Object File Format• INLINE - vkládané funkce• IPA - Interprocedural Analysis

Page 17: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++

• LP64/ILP32 - 64. bitový nebo 31. bitový preklad• OPTFILE - udává data set s volbami pro optimalizace• PPONLY - spustit pouze preprocesor• RTTI - run-time type information - umožnuje použítdynamic_cast

• SQL - pro zpracování SQL maker• UNROLL - rozbalování smycek• XPLINK - Extraperformance linking

Page 18: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++

Použité DDNAMES:

• SYSIN - zdrojový kód• SYSLIB - systemové hlavickové soubory• SYSOUT - chybová hlášení• STEPLIB - run-time knihovny

Page 19: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Prekladac C/C++

V JCL pro preklad je nutné pripojit následující knihovny:

• CEE.SCEERUN - PDS knihovna obsahující run-timerutiny pro C/C++, COBOL, PL/I, FORTRAN

• CEE.SCEERUN2 - PDSE knihovna obsahující run-timerutiny pro C/C++ a COBOL

• CBC.SCCNCMP -

Page 20: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Linkování programu

K linkováni se používá tzv. BINDER.Existují tri zpusoby, jak linkovat program:

1 jedno jediné linkování2 linkování jednotlivých objektových modulu3 prelinkovat zmenený object modul

Program pro linkování se jmenuje IEWL.

Page 21: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Linkování programu - jednojediné linkování

Page 22: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Linkování programu - linkováníjednotlivých objektových

modulu

Page 23: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Linkování programu -prelinkovat zmenený object

modul

Page 24: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Spuštení programu v TSO/E

V TSO/E lze použít príkazy:CALL ’program-data-set-member-name’[’parameters’]CALL ’obeto80.intro.load(hello)’

Page 25: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Použití katalogovanýchprocedur

Jazyk C jazyk C++ VýznamEDCC CBCC preklad 31-bitových a

64-bitových programuEDCCB CBCCB preklad a linkování

31-bitových programuEDCQCB CBCQCB preklad a linkování

64-bitových programuEDCCBG CBCCBG preklad, linkování a spuštení

31-bitového programuEDCQCBG CBCQCBG preklad, linkování a spuštení

64-bitového programu

Další procedury viz.:

• C/C++ User’s Guide - str. 297, 298,• Language Environment Programming Guide - str. 105

Page 26: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Program pro vypsáníargumentu príkazové rádky

INTRO.C(ARGS)

#include <stdio.h>int main( int argc, char* argv[] ){

int i;for( i = 0; i < argc; i ++ )

printf( "Argument %d -> %s\n", i, argv[ i ] );return 0;

}

Page 27: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Program pro vypsáníargumentu príkazové rádky

JCL kód pro preklad a linkování - využívá katalogovanouproceduru EDCCB:INTRO.JCL(ARGS)

//OBETO80J JOB (90300000),’OBETO80’,CLASS=A,// REGION=48M,MSGLEVEL=(1,1),MSGCLASS=H,// NOTIFY=&SYSUID//MYLIB JCLLIB ORDER=(’CEE.SCEEPROC’,’CBC.SCBCPRC’)//COMPPRC EXEC PROC=EDCCB,// CPARM=’SO LIST’,// INFILE=’OBETO80.INTRO.C(ARGS)’,// OUTFILE=’OBETO80.INTRO.LOAD(ARGS),DISP=SHR’

Page 28: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Program pro vypsáníargumentu príkazové rádky

JCL pro spuštení:INTRO.JCL(ARGSJOB)

//OBETO80J JOB (90300000),’OBETO80’,CLASS=A,// REGION=4096K,MSGLEVEL=(1,1),MSGCLASS=H,// NOTIFY=&SYSUID//JOBLIB DD DSN=OBETO80.INTRO.LOAD,DISP=SHR//MYARGS EXEC PGM=ARGS,// PARM=’/ARG1 ARG2 ARG3 ARG4’//SYSOUT DD SYSOUT=*/*

Page 29: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

Virtuální metody• svou funkcí casto nahrazují príkaz switch• príkaz switch lze pri prekládání lépe optimalizovat• volání virtuálních metod je nárocnejší

Výjimky• tvorí velkou prekážku pro optimalizaci• je nutné generovat mnoho kódu navíc pro možnost

sledování šírení výjimek• výrazne zpomalují kód, pokud k výjimce dojde

• - viz. M. Virius, Pasti a propasti jazyka C++, Výjimky bymely zustat výjimecné

• zpomalují ale i v prípade, kdy výjimka nevznikne

Page 30: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

Virtuální metody• svou funkcí casto nahrazují príkaz switch• príkaz switch lze pri prekládání lépe optimalizovat• volání virtuálních metod je nárocnejší

Výjimky• tvorí velkou prekážku pro optimalizaci• je nutné generovat mnoho kódu navíc pro možnost

sledování šírení výjimek• výrazne zpomalují kód, pokud k výjimce dojde

• - viz. M. Virius, Pasti a propasti jazyka C++, Výjimky bymely zustat výjimecné

• zpomalují ale i v prípade, kdy výjimka nevznikne

Page 31: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

RTTI - dynamic_cast<>

• Runtime Type Information - umožnuje zmenu typu za choduprogramu

• z toho plyne, že až za chodu programu se urcuje, jaký kódse bude provádet, to znemožnuje optimalizaci

• u kódu, kde hodne záleží na výkonu je lepší RTTI odstranit

• casto se lze RTTI vyhnout pomocí lepšího (jednoduššího)návrhu aplikace

STL - standard template library

• je dobré dobre znát, co se deje uvnitr a jakou trídu použít nakterý problém - seznamy, vektory apod.

Page 32: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

New/delete - dynamické alokace pameti• dynamické alokace je VELMI nákladná• je lepší nešetrit príliš pametí, alokovat si všechny

struktury dopredu a neuvolnovat je, když je budu brzyopet potrebovat

• dynamická alokace muže vést k fragmentaci pameti avelkému užírání pameti

• viz. clánek na root.cz - Jak funguje malloc a free• http://www.root.cz/clanky/jak-funguje-malloc-a-free

• nekdy je možné alokaci na halde nahradit alokací nazásobníku pomocí alloca

• http://www.gnu.org/software/libc/manual/

html_node/Variable-Size-Automatic.html#Variable-Size-Automatic

Page 33: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

ANSI aliasing rules

• používat konstanty - const• promenná se pak nemuže menit a není nutné ji pred

použitím vždy znovu nacítat v pameti - stací ji mít stáleuloženou v registru

• pri prístupu k datum pres ukazatel je lépe použít docasnou promennou

• používat lokální promenné místo globálních• každé volání funkce muže zmenit hodnotu globální

promenné, u lokálních se to stát nemuže• pri castém prístupu k globálním promenným je lépe

udelat lokální kopii• IPA toto umí rešit sama• je efektivnejší predávat data jako argument, než pomocí

globálních promenných• pro promenné v rámci modulu je dobré pužít oznacení static

• zarucuje, že se nebudou menit pri volání funkcí mimomodul

• omezit používání ukazatelu

Page 34: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

Zápis matematických výrazuPri zápisu:

a = b * ( x * y * z );c = x * y * z * d;

je rozpoznán stejný výraz x * y * z, ale prí zápisu

a = b * x * y * z;c = x * y * z * d;

již tomu tak není.

• doporucuje se, stejné výrazy psát vlevo nebo dozávorek

• obzvlášt’ vhodné pro nemenný výraz uvnitr smycky

Page 35: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

Prevod float na int je nárocný:

float a[ 10 ];for( i = 0; i < 10; i ++ )

a[ i ] = a[ i ] * i;

je lepší ve tvaru

float x = 1.0;for( i = 0; i < 10; i ++ ){

a[ i ] = a[ i ] * x;x = x + 1.0;

}

Page 36: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

• je lepší používat násobení než delení• zápis x * ( 1.0 / 3.0 ) je rychlejší než x / 3.0

nebot’ v prvním prípade se delení provede v dobeprekladu

• pro aritmetické operace je výhodnejí použít int, nežchar nebo unsigned int

Page 37: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Optimalizace pri programovánív C/C++

• funkce memcpy nebo memcmp bývají efektivnejší nežcykly

• memcmp muže být výhodnejší pro porovnávání struktur,než je bežné porovnávání

• memXXX jsou rychlejší než strXXX

Page 38: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Práce se soubory v C/C++

Typy souboru v z/OS:• OS files - klasické z/OS soubory• HFS files - Hierarchical file system - unixové soubory v

USS - Unix System Services• VSAM data sets - Virtual Storage Acces Method -

databázové soubory• Terminal files - práce s terminálem• Memory files - docasné soubory• Hiperspace memory files - docasné soubory uložené v

pameti - do 2 GB• CICS Data Queus• z/OS LE Message File - soubor pro stderr/cerr

Page 39: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Práce se soubory v C/C++Tri typy souboru podle zacházení s daty:

• text streams• stejné jako v Unixu• jde o text s nekolika speciálními rídícími znaky

• \n, \r, \t• tyto znaky se ukládají do souboru - u record I/O tomu tak

není

• binary streams• posloupnost bytu, žádné nemají speciální význam

• record I/O - logické záznamy - vety - F, FB, V, VB• obecne jde o bloky urcité velikosti• lze s nimi použít pouze funkce fread(), fwrite()

• nelze použít fprintf(), fscanf(), getc(), putc()• pokud chceme do vety zapsat více dat, než je její

velikost, data se oríznou• pri zmene obsahu vety se nemení velikost (napr. u V,

VB), pouze se prepíše príslušná cást• velikost vety nelze menit, jakmile je jednou vytvorena

Page 40: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Príkaz fopenLze použít stejne jako v Unixu/Windows:

#include <stdio.h>

int main( int argc, char* argv[] ){

FILE* f1;int i;printf( "Vytvarim soubor intro.cfile" );f1 = fopen( "intro.cfile", "w" );if( f1 == NULL ){

printf( "Nemuzu otevrit soubor intro.cfile" );return 16;

}for( i = 0; i < 100; i ++ )

fprintf( f1, "radek %d\n", i);printf("Stiskni klavesu ...");getchar();close( f1 );return 0;

}

Page 41: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Príkaz fopen

Funkci fopen lze udat i atributy data setu - DCB = DATACONTROL BLOCK atributy

• RECFM - formát dat• LRECL - logical record - veta - základní struktura dat

pro danou aplikaci• BLKSIZE - physical blocks

• množství dat, které budou nacteny z disku do bufferu prijedné operaci ctení

Page 42: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Príkaz fopen

DCB tyto atributy se zjišt’ují:

1 z parametru volání funkce fopen(), freopen()2 atributu pro dané ddname (z JCL)3 z atributu existujícího souboru (pri otevírání) - pomocírecfm=*

4 defaultní hodnoty pro fopen() a freopen()• pro binární soubory je to

• VB pro spool soubory• FB jinak

• pro textové soubory je to• F a LRECL = BLKSIZE = 254• V - pokud je udáno LRECL a BLKSIZE• VB jinak

Page 43: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Príkaz fopen

Možné formáty RECFM:

• F - fixed, V - variable, B - blocked, U - undefined• A - ASA znaky - pro formátování tisku na tiskárne• M - machine control characters• S - standard format

• každý blok musí být zaplnen vetami, než se vytvorí nový

Page 44: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Príkaz fopen

#include <stdio.h>

int main( int argc, char* argv[] ){

FILE* f1;int i;printf( "Vytvarim soubor intro.cfileps\n" );f1 = fopen( "intro.cfileps", "w,recfm=fb,lrecl=20,blksize=3120" );if( f1 == NULL ){

printf( "Nemuzu otevrit soubor intro.cfileps" );return 16;

}for( i = 0; i < 100; i ++ )

fprintf( f1, "radek %d 012345678901234567890\n", i);printf("Stiskni klavesu ...");getchar();close( f1 );return 0;

}

Page 45: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Fixed format record

F, FB, FBS, FS, FM, FBA, FBM, FBS, FSA, FSM, FBSA, FBSM

S - spanned files = jedna veta muže být rozdelena do vícebloku

• binární data• nezaplnené vety se doplnují nulami• data postupne pretékají z jedné vety do druhé• nezaplnené bloky se nedoplnují

Page 46: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Fixed format record

• text non-ASA• zápis do nového záznamu se provede pomocí znaku \n

nebo uzavrením a otevrením souboru• data, která se nevejdou do vety jsou odseknuta• prázdná místa vety po \n se doplnují mezerami, znak

\n se neukládá• pri ctení se znak \n vloží na místo první mezery

sekvence mezer na konci vety• prepisování vety zmení jen prepsané pozice, ne celou

vetu• text ASA

• obsahuje speciální znaky ASA• první pozice ve vete obsahuje speciální znak urcující,

co se má provést pri prechodu k nové vete• new line, carriage return, form feed

Page 47: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Variable-format record

V, VB, VBS, VS, VM, VBA, VBM, VBS, VSA, VSM, VBSA, VBSM

Obsahuje BDW a RDW.

• binární data• data "pretékají" do dalších vet• veta muže mít maximálne LRECL-4 bytu

• textová data• konec vety se urcuje pomocí \n• prázdná veta se uloží jako jedna mezera• pri zmene obsahu již nelze zmenit délku

• pri zápisu více dat -> oseknutí• pri zápisu méne dat -> doplnení mezerami

• text ASA - podobné jako u fixed

Page 48: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Undefined

• vše se zpracovává jako data - i BDW, RDW a rídíciznaky

• LRECL nemá žádný význam, ale musí být menší nežBLKSIZE

• veta odpovídá bloku• binární data

• postupne zaplnují jednotlivé bloky• text

• \n znamená hranici bloku

Page 49: Tomáš Oberhuber - cvut.cz

TomášOberhuber

Softwarovýprojekt

Programovacíjazyky v z/OS

Vyvtvoreníspustitelnéhokódu

Moduly

Programovánív C/C++ vz/OS

PrekladacC/C++

Linkováníprogramu

Spušteníprogramu vTSO/E

Použití katalo-govanýchprocedur

Optimalizacepriprogramovánív C/C++

Práce sesoubory vC/C++

Udávání ddnames

Provádí se pomocí predpony DD: v názvu souboru:

#include<stdio.h>char text[ 80 ], *result;FILE *fp;

int main( void ){

fp = fopen( "DD:INFILE", "r" );while( fscanf( fp,"%s", text ) != EOF )

printf( "%s\n", text );fclose( fp );return 0;

}


Recommended