0
votes

Définition de la taille maximale de tableau [] de matrice admissible des programmes C sous Linux

J'ai fait du code dans C impliquant des tableaux de caractères locaux, mais j'ai lu que si la taille des tableaux est trop élevée, un défaut de segmentation peut se produire.

Dans mon code, j'ai inclus la ligne suivante: xxx

et j'ai également ajouté dans la section de sortie:

printf ("% d", Taille_max);

lors de l'exécution, je vois A -1 qui me suggère illimité.

I, passez ensuite dans une console et vérifiait mes limites: xxx

et je vois beaucoup "illimité" '' s.

suis-je en train de regarder au bon endroit pour définir la taille maximale autorisée pour un tableau []? Si oui, quelle valeur dois-je modifier?


2 commentaires

Tant que ce n'est pas sur la pile. Le tableau doit être indexable alors je pense que taille_max est la limite.


Dans les limites, la ligne que vous vous souciez est Taille de la pile qui indique que la taille maximale de la pile est de 4096 kilo-octets, c'est-à-dire 4 mégaoctets.


3 Réponses :


0
votes

Vous devez modifier la taille code> pile code>. -S CODE> est la possibilité de définir la taille de la pile à l'aide de ulimit code>.

sur votre système actuellement il est 4 mégaoctets. P>

ulimit -s unlimited 
//sets stack size to ulimited


0 commentaires

0
votes

PrintF vous montre un -1 car le format de % d est un entier signé plus petit que non signé (généralement à 1 bit). Fonction Les matrices de caractères locaux vont sur la pile de sorte que c'est la valeur que vous recherchez.


0 commentaires

0
votes

Linux dispose d'un gestionnaire de mémoire virtuel qui allouera des blocs au besoin, des blocages d'échange sur le disque et d'essayer de faire ressembler le système, il n'y a pas de limite de pré-définie à la quantité de mémoire que vous pouvez attribuer à une tâche spécifique. Mais c'est comme une carte American Express avec "Aucune limite de dépenses pré-définie". Si vous essayez de charger une Ferrari, ils vont vous appeler et demander «WTF?». En réalité, toute la mémoire est finie et des tours de mémoire échoueront à un moment donné. Malheureusement, il n'y a pas de moyen pratique de savoir ce que ce point est à l'avance. Cela dépend de quoi d'autre fonctionne sur le système, la taille et la vitesse de votre disque, les paramètres du système d'exploitation et d'autres choses.

Dans la pratique, l'allocation d'un tableau proche de la quantité de RAM physique dans la machine est susceptible de causer des problèmes (ralentissements, si rien d'autre). Donc, cela pourrait être une limite raisonnable à considérer. Les fichiers mapé peut être une autre chose à prendre en compte, mais la réalité s'immisce sur leur performance également à un moment donné.


1 commentaires

Le système ne clignote pas lorsque vous allouerez un tableau près de la quantité de mémoire physique. C'est lorsque vous l'utilisez que des effets sont remarqués.