Portage de Unix à Windows en langage C...

Portage de Unix à Windows en langage C... - C - Programmation

Marsh Posté le 15-12-2003 à 11:53:23    

bijour,
 
Voilà je voulais savoir qu'elle expérience vous aviez sur une api écrite en c sous unix portée sous windows, genre les pt'its points qui peuvent vous pourir la vie sous l'OS de Kro$oft qui passe très bien sous unix...
 
mici.

Reply

Marsh Posté le 15-12-2003 à 11:53:23   

Reply

Marsh Posté le 15-12-2003 à 12:05:08    

Fodger a écrit :

bijour,
 
Voilà je voulais savoir qu'elle expérience vous aviez sur une api écrite en c sous unix portée sous windows, genre les pt'its points qui peuvent vous pourir la vie sous l'OS de Kro$oft qui passe très bien sous unix...
 
mici.


Tiens bizarre moi ce sont les appels système Windows qui me pourrissent la vie sous unix. Comme quoi la vie est vraiment mal faite.

Reply

Marsh Posté le 15-12-2003 à 13:28:19    

arf... c'est sûr que tout ce qui est appel système peut être contrariant. Mais bon... il peut y avoir des problèmes plus substils?

Reply

Marsh Posté le 15-12-2003 à 13:29:03    

Fodger a écrit :

arf... c'est sûr que tout ce qui est appel système peut être contrariant. Mais bon... il peut y avoir des problèmes plus substils?


ben si tu precises pas...

Reply

Marsh Posté le 15-12-2003 à 14:26:44    

chrisbk a écrit :


ben si tu precises pas...


 
Comment veux tu que je précise, vu que je demande justement si vous connaissez des cas de figures...

Reply

Marsh Posté le 15-12-2003 à 14:44:22    

Fodger a écrit :


 
Comment veux tu que je précise, vu que je demande justement si vous connaissez des cas de figures...


 
ben si t'utilises deux printfs et 3 scanfs, non, ca devrait aller

Reply

Marsh Posté le 15-12-2003 à 15:19:27    

Nan, c'est pas le cas:p... J'ai cru comprendre apparament qu'il faut par exemple faire attention avec les déclarations de grands tableaux sous windows, il vaut mieux faire du malloc à cause de la pile.

Reply

Marsh Posté le 15-12-2003 à 15:20:19    

(la verité c'est qu'il ne me viendrait pas a l'idee de declarer des tableau de grandes tailles en local)

Reply

Marsh Posté le 15-12-2003 à 15:47:01    

Fodger a écrit :

Nan, c'est pas le cas:p... J'ai cru comprendre apparament qu'il faut par exemple faire attention avec les déclarations de grands tableaux sous windows, il vaut mieux faire du malloc à cause de la pile.  

Y'a longtemps peut etre. De nos jours, ca doit pas etre different de ce qu'on peut faire sous unix.
Et qu'appelles tu "Grande taille"?
A+,


Message édité par gilou le 15-12-2003 à 15:47:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-12-2003 à 16:32:50    

gilou a écrit :

Y'a longtemps peut etre. De nos jours, ca doit pas etre different de ce qu'on peut faire sous unix.
Et qu'appelles tu "Grande taille"?
A+,


 
Genre beaucoup:D.
 
ex : char tc[30000][50]

Reply

Marsh Posté le 15-12-2003 à 16:32:50   

Reply

Marsh Posté le 15-12-2003 à 17:20:00    

gilou est-ce que tu sais ce à quoi correspond le "heap size" dans l'option d'un compilo?

Reply

Marsh Posté le 15-12-2003 à 19:18:41    

Citation :

/HEAP:reserve[,commit]
The /HEAP option sets the size of the heap in bytes. This option is only for use when building an .exe file.
 
The reserve argument specifies the total heap allocation in virtual memory. The default heap size is 1 MB. The linker rounds up the specified value to the nearest 4 bytes.
 
The optional commit argument is subject to interpretation by the operating system. In Windows NT/Windows 2000, it specifies the amount of physical memory to allocate at a time. Committed virtual memory causes space to be reserved in the paging file. A higher commit value saves time when the application needs more heap space, but increases the memory requirements and possibly the startup time.
 
Specify the reserve and commit values in decimal or C-language notation.
 
This functionality is also available via a module definition file with HEAPSIZE.


Pris dans le MSDN
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-12-2003 à 22:37:20    

Ouais j'étais tombé dessus, mais je ne suis pas tout à fait d'en avoir compris le mécanisme... tel que je l'ai compris, il s'agit d'une portion de ram réservée à la l'allocation dynamique des variables. Et si c'est 1 Mb par défaut, c'est pas de la folie:D. Le paramètre commit étant la taille d'un bloc:??:?
 
Donne moi ton pt de vue stp gilou:)...


Message édité par fodger le 15-12-2003 à 22:39:41
Reply

Marsh Posté le 16-12-2003 à 00:01:56    

Bon je ne vais parler que de Windows, et de programmes en C. Quand tu charges ton programme en memoire, l'espace qui lui est alloué sous windows est decoupé en grosso modo 4 zones:
Code, Data, Heap et Stack.
 
*********
* STACK *
*********
 |  |  |
 V  V  V
 
 ^  ^  ^
 |  |  |
*********
*  HEAP *
*********
*  DATA *
*********
*  CODE *
*********
La stack occupe l'espace en croissant vers le bas et la heap en croissant vers le haut (l'espace maximum allouable par un programme est une valeur qui est modifiable, et qui est lue par l'OS au lancement du programme. Le plus souvent, la valeur par defaut suffit).
 
Le section code contient le code du programme, la section data, la memoire statique, la heap la memoire dynamique, et la stack tout le reste, et en particulier les variables locales.
 
Donc si tu a une variable locale de type char tc[30000][50], elle sera allouee dans la stack. Si cette variable etait globale ou si elle etait static, ce serait dans la section data.
Et si c'etait  char **tc = malloc(30000*50) ce serait dans la heap.
 
Bon bien entendu, j'ai hyper simplifié:
L'ordre des sections stack heap data code est l'ordre par defaut et peut etre modifié (option /DO) les sections code et stacks peuvent etre multiples.
De plus, sous windows, en plus de la heap par defaut de son programme, il y a moyen de creer des heaps specifiques au moyen de HeapCreate()
 
 
Dans le modele unix, on a des choses +/- similaires:
une section .text (pour le code), une section .data pour la memoire statique initialisée, une section .bss pour la memoire statique non-initialisée (BSS vient de Block Started by Symbol), une section .heap et une section .stack
Si de plus, c'est du C++ et non du C, on aura eventuellement: une section .init (le startup code), une section .fini (l'exit code), une section .ctor (pour les constructeurs) et une section .dtor (pour les destructeurs)
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-12-2003 à 06:48:10    

Ok hormis la pile j'ignorais le reste, t'aurais pas un lien sous le coude stp?
 
:jap:

Reply

Marsh Posté le 16-12-2003 à 14:05:37    

Ben cherche sous google avec stack heap data bss et tu en trouveras
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed