IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

allocation et management de la memoire


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut allocation et management de la memoire
    Bonjour la communaute,

    voila pour etre franc, une boite me demande de repondre a ces questions en moins de 24 heures et quelques soient les moyens utilises, je dois repondre correctement a toutes ces questions, meme si les reponses ne viennent pas de moi.

    Si au moins l'un d'entre vous pouvez repondre a ces questions pour que je compare avec ce que je vais repondre de mon cote, ca serait super sympa ... j'ai besoin de reponses des plus professionnels d'entre-vous, car moi je suis seulement intermediaire.

    Merci d'avance pour votre temps.

    PS: j'ai eu deja quelques reponses dnas le forum C++(je pensai que c t du C++ au debut) donc les quesitons qui me bloquent le plus sont les dernieres 8, 9 et 10.

    -----------------------------------------

    Please be sure to mention MEMORY MANAGEMENT AND MEMORY ALLOCATION, specifically, in your answers.

    Skill Assessment Sheet

    Line
    Contains


    50
    char *b, q, *r;

    200
    b = getbuf ();

    201
    q = *b;

    212
    R = anotherfunction (b);

    213-2003
    /* we want to use 'q' and 'r' here */

    2000
    char * getbuf ()

    2001
    {

    2002
    char buff [8];

    2003-2050
    /* unspecified buff defined here */

    2051
    return (char*) buff;

    2052
    }


    1. What will be in variable 'q' after line 201 is executed? Under what conditions might this not be so?

    The function "getbuf" has a memory allocation problem. Therefore the system memory management imply that b takes an undetermined value because of the return value of "getbuf". Then "q" will be undetermined because it is assigned to "*b".

    2. Is there an alternative, but equivalent, way to write line 2000? If so, what is it?

    Yes there are other ways to write it. For instance:

    char *getbuf(void)
    or
    const char* getbuf()

    3. Is getbuf() a reasonable function?

    No it is not a reasonable function because it returns an adress of a local variable. As a result "getbuf" returns a pointer to a memory that is then desallocated by the memory management.

    4. Will getbuf() execute at all?

    It is the main problem of this program because "getbuf" would execute correctly. Indeed there are no memory allocation problems, it is just a memory management issue.

    5. Please comment on line 2051.

    It is useless to cast buff into a char* because it is an array by definition. Then it is not reasonable to return the adress of "buff" because it is a local variable about to be cleaned by memory management. Thus the pointer will be undetermined at the exit of "getbuf".

    6. Is getbuf() good practice, and why?

    "getbuf" is not good practice for all reasons given above. "buff" is a local variable of the fucntion. Thus the returned adress will point to something undetermined and the rest of program will suffer from this mistake.

    7. What line not given should be provided for compilation?

    A prototype of the function "getbuf" should be provided for compilation.

    8. How, exactly, could one get a second 'char*' to use back from this function? Be specific in terms of the exact syntax needed. (That is, provide code.) Another way to state this question is how can this function be modified to return a 'char*' (that is, it maintains the same return type) from the function, and an additional 'char *' value in one function call. Please make sure that your answer will work even if the size of the char * desired is not known in the outside calling function. Avoid (do no use) C++ syntax. Include statement in called and calling functions. Use food programming practice.



    9. For those candidates who know SQL: There is a table with gene_ids ('gid') and clone_ids ('cid'). Each gene only resides on a single clone and each clone may contain multiple genes. How do would you find how many genes are on each and every clone? Please provide the SQL.



    10. What's the difference between system calls and library functions?

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: allocation et management de la memoire
    Citation Envoyé par micamused
    Si au moins l'un d'entre vous pouvez repondre a ces questions pour que je compare avec ce que je vais repondre de mon cote, ca serait super sympa ... j'ai besoin de reponses des plus professionnels d'entre-vous, car moi je suis seulement intermediaire.
    Donne tes réponses, et on les corrigera peut être...

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut Re: allocation et management de la memoire
    Que veut dire "Use food programming practice" ?

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut
    s'il vous plait, il me faut une reponse pour la question 10 cette aprem sinon je suis mort ... question de boulot !!!

    MErci.

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par micamused
    s'il vous plait, il me faut une reponse pour la question 10 cette aprem sinon je suis mort ... question de boulot !!!
    Etant sur un forum francophone, peut être que si les questions étaient en français ça permettrait à plus de monde d'y répondre.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Par défaut
    ALors la question 10 demande la difference entre les appels systeme et la librairie de fonctions ...

    je sais meme pas ce que c'est que ces trucs ...

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    dans la librairie de fonctions, les fonctiosn sont copiées dans l'exécutable lors de l'édition de liens (dernière étape de la compilation)

    Les appels système par contre, appellent des fonctions qui se trouvent dans le système d'exploitation et non dans le programme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Médinoc
    dans la librairie de fonctions, les fonctiosn sont copiées dans l'exécutable lors de l'édition de liens (dernière étape de la compilation)
    Dans le cas des librairies statiques...pour les autres, j'espère bien qu'il ne copie pas les fonctions

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Sur un unix de base, il n'y a que des librairies statiques et des appels système, je crois: les .so, c'est du linux, non ?

    Sous Windows,comme librairies dynamiques, il y a les DLL... Et pour elles, bien sûr, les fonctions ne sont pas copiées: la librairie statique d'importation ne contient qu'un loader...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Médinoc
    Sur un unix de base, il n'y a que des librairies statiques et des appels système, je crois: les .so, c'est du linux, non ?
    Qu'appelles-tu un "unix de base" ?
    Les librairies partagées ne sont pas spécifiques à Linux en tous cas.
    Comme l'indique le man de dlopen() (et un même mécanisme n'utilise pas forcément cette interface), "l'interface standard dlopen() vient de Solaris" (ou "SunOS 4" selon la version du man).
    Donc les librairies partagées existent aussi sous Solaris/SunOS.
    On les trouve aussi sous AIX (depuis la version 4.2 au moins, cf. http://publib.boulder.ibm.com/infocenter/pseries/index.jsp?topic=/com.ibm.aix.doc/libs/basetrf1/dlopen.htm), sous MacOS X 10.3+ (cf. http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/dlopen.3.html) où de toutes façons il y avait déjà possibilité d'utiliser des librairies dynamiques (cf. http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/dyld.3.html#//apple_ref/doc/man/3/dyld), sous SCO Unix, il y en a (cf. http://www.zenez.com/tmp/scoprogfaqz/cache/117.html), et sous FreeBSD, OpenBSD (je te laisse chercher les liens), etc...
    Quant à l'extension ".so" : les extensions n'ont, à ma connaissance pas énormément d'importance sous un Unix/Linux/similaire (moins en tous cas que sous Windows) et l'utilisation ou pas de cette extension sous tel ou tel système ne change rien au principe des librairies partagées.

    Citation Envoyé par Médinoc
    Sous Windows,comme librairies dynamiques, il y a les DLL... Et pour elles, bien sûr, les fonctions ne sont pas copiées: la librairie statique d'importation ne contient qu'un loader...
    Quand tu écris "un loader", tu veux dire "du code qui charge la librairie et est inclu dans l'exécutable" ?

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Citation Envoyé par David.Schris
    Quand tu écris "un loader", tu veux dire "du code qui charge la librairie et est inclu dans l'exécutable" ?
    Oui.
    Il y a forcément un mimimum de code inclus dans l'exécutable pour dire au système qu'on utilise telle librairie dynamique (comme l'indique le nom de librairie statique d'importation, ou "import library" comme ils disent sur MSDN)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Médinoc
    Sous Windows,comme librairies dynamiques, il y a les DLL... Et pour elles, bien sûr, les fonctions ne sont pas copiées: la librairie statique d'importation ne contient qu'un loader...
    Citation Envoyé par Médinoc
    Citation Envoyé par David.Schris
    Quand tu écris "un loader", tu veux dire "du code qui charge la librairie et est inclu dans l'exécutable" ?
    Oui.
    Il y a forcément un mimimum de code inclus dans l'exécutable pour dire au système qu'on utilise telle librairie dynamique (comme l'indique le nom de librairie statique d'importation, ou "import library" comme ils disent sur MSDN)
    Pourquoi "forcément" ?
    Je pose la question car d'après mes maigres connaissances, il n'y a pas de code inclus dans l'exécutable pour dire au système quelle librairie il utilise.
    Cela contredit d'ailleurs plusieurs documents. Quelques exemples suivent...
    Citation Envoyé par http://msdn.microsoft.com/msdnmag/issues/02/02/PE/default.aspx
    Within a PE file, there's an array of data structures, one per imported DLL. Each of these structures gives the name of the imported DLL and points to an array of function pointers. The array of function pointers is known as the import address table (IAT). Each imported API has its own reserved spot in the IAT where the address of the imported function is written by the Windows loader.
    Là on nous dit qu'il n'y a que des structures de données, pas du code. c'est le "loader" de Windows qui charge les DLL, pas le programme (enfin, pas dans le cas qui nous occupe).
    Citation Envoyé par http://en.wikipedia.org/wiki/Library_(computer_science)
    Only a minimal amount of work is done at compile time by the linker-- it only records what libraries the executable needs and the index names or numbers. The majority of the work of linking is done at the time the application is loaded (loadtime) or during the execution of the process (runtime). The necessary linking code, called a loader, is actually part of the underlying operating system.
    Là aussi, on nous dit que le code fait partie du système (i.e. : et donc n'est pas inclus dans le programme).
    Citation Envoyé par http://www.windowsitlibrary.com/Content/356/11/4.html
    Every DLL has an import library that can either be created using an import librarian or may be generated by the linker itself while creating the DLL. The import library has stub functions with names the same as those of the functions exported from the DLL. The import library also has a .idata section containing an import table that has entries for all the functions from the DLL. Each stub function is an indirect jump that refers to the appropriate entry in the IAT in the .idata section. When an executable is linked with the import library, the linker resolves the imported function calls to the stub functions in the import library. The linker also concatanates the .text section from the import library that contains the stub functions with the .text section of the generated executable. The .idata sections and, incidentally, the import directories are also concatenated. The stage is now set for loading. While loading, the entries in the IAT are replaced by the actual function addresses, and that’s it. Now when the function is called, the control is transferred to the stub function that performs an indirect jump. As the IAT entry contains the address of the actual function from the DLL, the control is transferred to the required function.
    Là ils donnent des détails concernant la structure des librairies d'import. Les structures lues (et complétées) par le loader de Windows sont dans la section ".idata" (comme "Imported DATA") et la section ".text" ne contient que des "stubs" qui ne sont autres que des sauts indirects.

    Bref, dans une "import library", et "comme ils disent sur MSDN" (pour reprendre ton expression), il n'y a pas de code destiné à charger les DLLs nécessaires au programme.
    Pour t'en convaincre, compile un petit programme (qui sera au moins lié à "kernel32.dll" et n'utilisera pas les fonctions LoadLibrary(), GetProcAddress(), etc histoire de ne pas t'induire en erreur) et désassemble-le : si tu trouves le code qui charge la/les DLL utilisées dans l'EXE généré, c'est, à mon humble avis, que tu as abusé de substances psychotropes... Si ce n'est pas le cas, poste le code source et la version désassemblée en mettant en valeur le code chargeant les librairies qui selon toi aurait été inclus depuis les librairies d'import : le sujet m'intéresse.

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Il est aussi possible que je me sois trompé en effet: pas de code exécutable dans l'import library, si une Import Table suffit.

    J'ai du confondre avec d'autre plateformes (y compris des calculatrices)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Allocation memoire et management de la memoire
    Par micamused dans le forum C++
    Réponses: 9
    Dernier message: 16/11/2005, 09h07
  2. char * et Allocation de memoire
    Par venomelektro dans le forum C++
    Réponses: 3
    Dernier message: 14/10/2004, 13h24
  3. allocation et desallocation de memoire
    Par barthelv dans le forum C
    Réponses: 7
    Dernier message: 22/06/2004, 13h23
  4. Réponses: 13
    Dernier message: 05/01/2004, 19h00
  5. Allocation memoire Limité avec TurboC
    Par sebastien51 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 15/10/2003, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo