» »

[C++] novi standardi in compilerji

[C++] novi standardi in compilerji

Ezekiel ::

Zdravo!

Uporabljam Mingw prevajalnike, torej g++. Za prevajat kodo v c-ju se za nove standarde uporablja ukaz -std=c99.
Kako naj sedaj uporabim standard C99 v C++. Čeprav je C99 mišljen za C, naj bi bile nekatere nove vsebine (npr. format long long) implementirane tudi za C++.

Mimogrede, poleg Mingw za Linux, ali obstaja kakšen drugi prevajalnik, ki že podpira 64 bitne procesorje? No ja, že to da deluje bi bilo dobro, da podpira pa še bolj. Borland in Mingw v Windowsih trenutno ne delujeta na 64 bitih... Ta nov Visual Studio tudi nekaj štrajka...

hvala in lp

OwcA ::

Mimogrede, poleg Mingw za Linux, ali obstaja kakšen drugi prevajalnik, ki že podpira 64 bitne procesorje? No ja, že to da deluje bi bilo dobro, da podpira pa še bolj. Borland in Mingw v Windowsih trenutno ne delujeta na 64 bitih... Ta nov Visual Studio tudi nekaj štrajka...

Intel C++ Compiler.
Otroška radovednost - gonilo napredka.

trs ::

'long' na 64 bitnih compilerjih je ze sam po sebi 64 biten, tako da ne rabis uporabljat 'long long' (razen mogoce na M$ compilerjih).

Sicer pa, zakaj konkretno rabis 64 bitov? Naceloma za poganjat 64 bitne aplikacija rabis imet tudi 64 biten OS...

Ezekiel ::

Celotna zadeva mi teče na AMD Athlonu 64, v Windows XP 64 bit edition oziroma Fedori core 3, 64 bitna verzija.
Zakaj long oziroma 64 bitne besede? Manipuliram z recimo 120 bitnimi števili, ki so "pospravljene" v več besed, primer:

če vzamemo tip short int, jih za 120 bitov potrebujemo 8 besed, ker je 8 * 16 = 128 bitov.
če pa vzameš 64, pa potrebuješ le 2, ker je 2 * 64 = 128.

Sedaj pa, koliko je hitrejša aritmetika oziroma katera je hitrejša? (recimo >>, &, ^, |, ..., poljubne druge funkcije)

Zato potrebujem 64 bitne besede.

SasoS ::

Dunno...VS2005 bi mogu podpirat A64. Če ne pa se mi zdi da M$ nima long long typa ampak _int64.

Brane2 ::

Feel free to flame me, ampak a še komu preseda ta je*ačina z longi, long longi shorti itd ?

Na dveh mašinah niso vse kombinacije iste.
A ne bi blo lepo, če bi uvedli kot standard neko "pojočo" kodo za tip spremenljivke (kot je to v nekih računovodskih zadevah, recimo), recimo v stilu int8, int16, int32 itd ?

Ne vem še veliko o Cju itd a v tem času odkar se igram z njim mi gre to na živce...
On the journey of life, I chose the psycho path.

Vesoljc ::

brez flama brane2 :)

zato je prva stvar, ki jo je potrebno spisat compiler specific header, ki uredi tipe (typedef) tako kot se spodobi. tole je sicer cist osebna preferenca, ampak imamo nekako tako:

Int8,16,32,64
SInt8,16,32,64
Real32,64

vedno in povsod jasno! aha za preverjanje prave velikosti dolocenega inta pa lahko uporabis en compile time trik z arrayem...

ce ga najdem :)
Abnormal behavior of abnormal brain makes me normal...

64202 ::

Zgodovina sprememb…

  • spremenilo: 64202 ()

Ezekiel ::

ampak, kljub vsemu ...

sizeof(long int) vrne 32 ... in to povsod...

s tem da program racuna hitreje v Windowsih kot v Linuxu...
boo...

trs ::

@Ezekiel

Definiraj povsod :)

S kaksnimi optimizacijami si prevedu pod linuxom/windowsi?

Vesoljc ::

> sizeof(long int) vrne 32 ...

aja?
;)
Abnormal behavior of abnormal brain makes me normal...

trs ::

@Vesoljc

Ja, mislim da na MSVCju je long zmeraj 32 biten, zato da imajo backward compatibility... pac se ena M$ pogruntavscina.

Na Linuxu64 pa sem skoraj 100% da bi moral bit 64 bit.

Vesoljc ::

hehe, sizeof(neki) vrne byte ne bit-e ;)
Abnormal behavior of abnormal brain makes me normal...

Nerdor ::

Iščem C++ ustreznice pod MSVC-jem za tele C sist. headerje:
#include<time.h>                       //za seme funkcije srand() 
#include<stdlib.h>                       //za srand() 


Kak namig bi mi bil zelo dobrodošel!

PS: nevermind, sej deluje, neki sem zeznil. :) Ni treba iskat ustreznic.
... for lifetime!

Zgodovina sprememb…

  • spremenil: Nerdor ()

OwcA ::

cstdlib, time.h pa kolikor vem ni prestavljen v std.
Otroška radovednost - gonilo napredka.

Ezekiel ::

definicija povsod: Borland C++ 6, MingW za Windows, Visual studio

Sizeof(long int) vrne 4 byte ... 4 * 8 = 32 bitov...

Ampak še vedno je zadeva počasnejša v Linuxu. Nobene optimizacije pri prevajanju, obakrat uporabljen g++.



off topic: kako se "zbriše" spremenljivko v C++ po uporabi (recimo kot delete za tabele), da ne potem RAMa prehitro zmanjka?

OwcA ::

Bodisi pametno postaviš scope-e, tako da umre alu za tem, ko je ne rabiš več, bodisi kot si sam rekel, z delete. Za slednje mora seveda biti dinamično alocirana.

Velikost podatkovnega tipa ni toliko odvisna od prevajalnika ali operacijskega sistema, kot strojne opreme.
Otroška radovednost - gonilo napredka.

64202 ::

Nerdor: klik

trs ::

@Ezekiel:

sizeof(long int) je na 32 bitnih compilerji 32 bitna, na 64 bitnih pa bi morala bit 64 bitna. MinGW, Borland so 32bitni compilerji. MSVC verjetno tudi, odvisno od verzijo in opcij, ki jih uporabljas.

Zakaj je na linuxu pocasneje pa se mi ne sanja. Naceloma nebi smelo bit prevelikih razlik. Mogoce ce lahko postas kos kode ki uporabljas za to meritev bi lahko znali rect kaj vec ...

Nisem cisto preprican kaksne nastavitve ima po defaultu MinGW, sicer pa poskusi tudi z optimizacijami na obeh platformah:
gcc -march=pentiumpro -O3 bla.c -o bla
... ali kaj podobnega.

@Owca: Velikost tipov je predvsem odvisna od compilerja, ne od strojne opreme ;)

lp,
trs

OwcA ::

Imaš prav, en možganski prdec je bila izjava zgoraj, prevajalnik je le povečini dovolj pameten, da izbere za strojno opremo primerno poravnavo.
Otroška radovednost - gonilo napredka.

BigWhale ::

> off topic: kako se "zbriše" spremenljivko v C++ po uporabi (recimo
> kot delete za tabele), da ne potem RAMa prehitro zmanjka?

Uhm? Ce jih delas na stacku, se same zbrisejo (naj bi se), ko zapustis funkcijo recimo. Ce jih pa delas na heapu z new, jih moras pa z delete pobrisat.

Ali kaj si imel v mislih?

Ezekiel ::

ok...

g++ -O3 -march=athlon64 ...

definitivno en 20% do 30% hitreje kot v Windowsih...

Zgodovina sprememb…

  • spremenil: Ezekiel ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
756824 (4644) Senitel
»

Pomnilnik in c++

Oddelek: Programiranje
241651 (1360) Gundolf
»

[C/C++] unsigned long lala = -1;

Oddelek: Programiranje
5993 (952) Vesoljc
»

C++ vs. C (strani: 1 2 )

Oddelek: Programiranje
766138 (5129) rokpok
»

double v bitno in obratno? (c++)

Oddelek: Programiranje
10899 (785) noraguta

Več podobnih tem