Les pièces dsPic30/33 et 18E/F produiront des erreurs de mémoire si des accès 16 bits sont effectués en mémoire sur des adresses impaires. Lorsque vous allouez de la mémoire heap en utilisant malloc(), l'adresse de retour est-elle garantie pour être alignée sur un mot? (c'est-à-dire pair)Est-ce que malloc() sous Microchip XC16 est garanti pour produire des adresses alignées sur un mot?
malloc, vous vous en souviendrez, prend un argument en octets, pas en mots.
La documentation que j'ai été en mesure de trouver (manuel de référence de la bibliothèque d'outils linguistiques 16 bits 50001456J.pdf) est muette sur ce problème. Edit: Je dois ajouter que je n'ai jamais reçu que des adresses paires (alignées sur un mot) de malloc(), donc tout fonctionne bien jusqu'à maintenant. Néanmoins, mon code causera un piège si jamais je reçois une adresse étrange (parce que je fais des choses comme ((uint16_t *)foo)[3] = 20000;
). Par conséquent, je veux être sûr que même les adresses sont toujours retournées par malloc().
Est-ce que la langue a un type qui effectue des accès 16 bits? Quelque chose comme 'some_type foo; foo = 3; 'où' = 'fait-il un accès 16 bits? Si c'est le cas, 'malloc' * doit * fonctionner. –
@DavidSchwartz bien il est possible que l'implémentation soit buggée –
La documentation ne vous aiderait pas si c'était un bug. Les bogues sont généralement non documentés. S'il a un vrai type 16 bits, alors malloc doit donner un pointeur légal à un. –