Maison > développement back-end > C++ > Comment puis-je modifier la taille de la pile pour les applications C sous Linux ?

Comment puis-je modifier la taille de la pile pour les applications C sous Linux ?

Susan Sarandon
Libérer: 2024-12-24 20:03:22
original
987 Les gens l'ont consulté

How Can I Change the Stack Size for C   Applications in Linux?

Modification de la taille de la pile pour les applications C sous Linux à l'aide du compilateur GNU

En C, la taille de la pile peut être ajustée lors de la compilation pour répondre aux besoins spécifiques en mémoire d'une application particulière . Bien que l'option LD_FLAGS fonctionne bien sous macOS avec g , les distributions Linux telles que SUSE Linux utilisent une approche différente.

Pour augmenter la taille de la pile sous Linux pour une seule application utilisant GCC, deux méthodes principales sont couramment utilisées :

Commande ulimit -s

La commande ulimit -s peut être utilisée pour définir la limite de taille de pile pour un utilisateur ou un processus spécifique. Cependant, cette méthode nécessite des privilèges élevés et doit être exécutée avant de lancer l'application. Par exemple :

ulimit -s unlimited
Copier après la connexion

Définition de la taille de la pile par programme

Alternativement, la taille de la pile peut être définie par programme dans le code de l'application à l'aide de setrlimit. Cette méthode est plus portable et permet aux applications d'ajuster dynamiquement la taille de leur pile au moment de l'exécution. L'extrait de code suivant montre comment augmenter la taille de la pile à 16 Mo :

#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

Notez que même avec cette méthode, il est important d'éviter de déclarer des variables locales volumineuses dans main() car un débordement de pile peut se produire avant l'ajustement de la taille de la pile prend effet.

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