Maison > développement back-end > C++ > Comment modifier la taille de la pile d'applications C sous Linux pendant la compilation ?

Comment modifier la taille de la pile d'applications C sous Linux pendant la compilation ?

Linda Hamilton
Libérer: 2024-12-27 17:17:10
original
574 Les gens l'ont consulté

How to Modify C   Application Stack Size in Linux During Compilation?

Modification de la taille de la pile pour les applications C sous Linux lors de la compilation avec le compilateur GNU

Contrairement à macOS, où LD_FLAGS peut être utilisé pour spécifier la taille de la pile lors de la compilation C avec g , les distributions Linux comme SUSE Linux affichent des erreurs lorsqu'elles rencontrent une telle commande. Ce problème survient en raison de l'indisponibilité de l'option --stack dans l'éditeur de liens Linux.

Pour contourner cet obstacle, une approche alternative consiste à définir la taille de la pile par programme dans l'application elle-même. En tirant parti de la fonction setrlimit, les développeurs peuvent modifier la taille de la pile après la compilation de l'application. Voici un extrait de code illustratif :

#include <sys/resource.h>

int main (int argc, char **argv)
{
    const rlim_t kStackSize = 16 * 1024 * 1024;   // min stack size = 16 MB
    struct rlimit rl;
    int result;

    result = getrlimit(RLIMIT_STACK, &rl);
    if (result == 0)
    {
        if (rl.rlim_cur < kStackSize)
        {
            rl.rlim_cur = kStackSize;
            result = setrlimit(RLIMIT_STACK, &rl);
            if (result != 0)
            {
                fprintf(stderr, "setrlimit returned result = %d\n", result);
            }
        }
    }

    // ...

    return 0;
}
Copier après la connexion

Veuillez noter que l'utilisation de cette méthode nécessite d'éviter de déclarer de grandes variables locales dans la fonction main(), car cela pourrait entraîner un débordement de pile avant l'exécution de l'ajustement de la taille de la pile. Au lieu de cela, définissez ces variables dans les fonctions appelées depuis main(), une fois la taille de la pile modifiée avec succès.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal