D'autres réponses ont couvert du côté du PC assez bien. Je reviendrai sur certaines de ces questions dans le monde embarqué.
Code incorporé ne avoir quelque chose de similaire à une erreur de segmentation. Le Code est stocké dans une sorte de stockage non-volatile (généralement flash ces jours-ci, mais une sorte de ROM ou PROM dans le passé). L'écriture de ce les besoins d'opérations spéciales pour le configurer, pour une normale de l'accès à la mémoire puisse lire mais pas écrire. En outre, les processeurs ont généralement de grandes lacunes dans leur mémoire les cartes. Si le processeur reçoit une demande d'écriture de la mémoire qui est en lecture seule, ou si elle devient une opération de lecture ou d'écriture demande une adresse qui n'existe pas physiquement, le processeur est généralement de jeter un matériel d'exception. Si vous avez un débogueur connecté, vous pouvez vérifier l'état du système à trouver ce qui n'allait pas, comme avec un core dump.
Il n'y a aucune garantie que ce sera le cas pour un débordement de pile si. La pile peut être placé n'importe où dans la mémoire RAM, et ce sera généralement avec d'autres variables. Le résultat de débordement de pile sera généralement à corrompre ces variables.
Si votre application utilise également des tas (allocation dynamique), puis il est courant d'attribuer une section de la mémoire où la pile commence au bas de cet article et s'étend vers le haut, et le tas commence au sommet de cette section et s'élargit vers le bas. Clairement, cela signifie allouée dynamiquement des données sera la première victime.
Si vous êtes malchanceux, vous ne pouvez pas le même avis quand il arrive, et puis vous avez besoin de savoir pourquoi votre code n'est pas se comporter correctement. Le plus ironique cas, si les données écrasé est un pointeur, alors vous pouvez toujours obtenir un matériel d'exception lorsque le pointeur de la tente d'accéder à la mémoire invalide - mais ce sera peu de temps après le débordement de la pile et le naturel hypothèse sera généralement que c'est un bug dans votre code.
Code embarqué a un modèle commun pour faire face à cela, qui est de "filigrane" de la pile par l'initialisation de chaque octet d'une valeur connue. Parfois, le compilateur peut le faire; ou parfois, vous devrez peut-être mettre en œuvre vous-même dans le code de démarrage avant le main(). Vous pouvez regarder en arrière à partir de la fin de la pile de trouver où il n'est plus fixé à cette valeur, à quel point vous connaissez la haute-eau de marque pour l'utilisation des piles; ou s'il est incorrect, alors vous savez que vous avez un dépassement de capacité. Il est courant (et de bonnes pratiques) pour les applications intégrées à ce sondage en continu comme une opération en arrière-plan, et pour être en mesure de signaler des fins de diagnostic.
L'avoir rendu possible le suivi de l'utilisation des piles, la plupart des entreprises, un acceptable pire-cas de la marge pour éviter les débordements. C'est généralement quelque part de 75% à 90%, mais il y aura toujours des pièces de rechange. Non seulement cela permet pour la possibilité qu'il y a de pire pire des cas, vous n'avez pas encore vu, mais il rend aussi la vie plus facile pour le développement futur quand le nouveau code doit être ajouté qui utilise le plus de la pile.