История изменений
Исправление
Moisha_Liberman,
(текущая версия)
:
Вот краткое повторений реплик, с чего всё началось. Максимально допустимый размер массива на стеке? (комментарий)
Вот в этой строке для случая gcc/glibc/x86_64 я не прав.
где же у нас реализована __builtin_alloca (size), как не в glibc в данном случае и как она реализована кроме как внутренняя ф-я библиотеки?
Да, я не корректно написал, не в glibc, а в gcc. Хотя, вот в этом комменте Максимально допустимый размер массива на стеке? (комментарий) я написал всё верно:
Пусть лучше этим занимается внутренняя реализация gcc.
Проблема в том, что мне знакомы архитектуры, где как и сказано в /usr/include/alloca.h:
/* Allocate a block that will be freed when the calling function exits. */
extern void *alloca (size_t __size) __THROW;
#ifdef __GNUC__
# define alloca(size) __builtin_alloca (size)
#endif /* GCC. */
Показываю этот же хидер уже в четвёртый раз. Но мне знакомы архитекуры, где исполняется условие не для GNUC, т.е., именно extern void alloca (size_t __size) __THROW; что в данном случае означает что функцию alloca() нужно взять где-то, если это не GNUC, иначе gcc сам её предоставит. Где её взять, эту функцию? Из тех самых «кривых патчей» для того же Sparc32 или CRAY, как выше, да? И, как мы с Вами оба понимаем, детали реализации этой самой extern void *alloca(size_t __size) не сделают её макросом.
void* vs. char* это несущественная мелочь, не надо к этому цепляться.
Нет. В строке *func1((void )alloca + 1234); дело не в void * vs. char *. Ещё раз посмотрите на сигнатуру alloca()? Только внимательно. ;)
Исправление
Moisha_Liberman,
:
Вот краткое повторений реплик, с чего всё началось. Максимально допустимый размер массива на стеке? (комментарий)
Вот в этой строке для случая gcc/glibc/x86_64 я не прав.
где же у нас реализована __builtin_alloca (size), как не в glibc в данном случае и как она реализована кроме как внутренняя ф-я библиотеки?
Да, я не корректно написал, не в glibc, а в gcc. Хотя, вот в этом комменте Максимально допустимый размер массива на стеке? (комментарий) я написал всё верно:
Пусть лучше этим занимается внутренняя реализация gcc.
Проблема в том, что мне знакомы архитектуры, где как и сказано в /usr/include/alloca.h:
/* Allocate a block that will be freed when the calling function exits. */
extern void *alloca (size_t __size) __THROW;
#ifdef __GNUC__
# define alloca(size) __builtin_alloca (size)
#endif /* GCC. */
Показываю этот же хидер уже в четвёртый раз. Но мне знакомы архитекуры, где исполняется условие не для GNUC, т.е., именно extern void alloca (size_t __size) __THROW; что в данном случае означает что функцию alloca() нужно взять где-то, если это не GNUC, иначе gcc сам её предоставит. Где её взять, эту функцию? Из тех самых «кривых патчей» для того же Sparc32 или CRAY, как выше, да?
void* vs. char* это несущественная мелочь, не надо к этому цепляться.
Нет. В строке *func1((void )alloca + 1234); дело не в void * vs. char *. Ещё раз посмотрите на сигнатуру alloca()? Только внимательно. ;)
Исходная версия
Moisha_Liberman,
:
Изначально речь была вот о чём.
Вот краткое повторений реплик, с чего всё началось. Максимально допустимый размер массива на стеке? (комментарий)
Вот в этой строке для случая gcc/glibc/x86_64 я не прав.
где же у нас реализована __builtin_alloca (size), как не в glibc в данном случае и как она реализована кроме как внутренняя ф-я библиотеки?
Да, я не корректно написал, не в glibc, а в gcc. Хотя, вот в этом комменте Максимально допустимый размер массива на стеке? (комментарий) я написал всё верно:
Пусть лучше этим занимается внутренняя реализация gcc.
Проблема в том, что мне знакомы архитектуры, где как и сказано в /usr/include/alloca.h:
/* Allocate a block that will be freed when the calling function exits. */
extern void *alloca (size_t __size) __THROW;
#ifdef __GNUC__
# define alloca(size) __builtin_alloca (size)
#endif /* GCC. */
Показываю этот же хидер уже в четвёртый раз. Но мне знакомы архитекуры, где исполняется условие не для GNUC, т.е., именно *extern void alloca (size_t __size) __THROW; что в данном случае означает что функцию alloca() нужно взять где-то, если это не GNUC, иначе gcc сам её предоставит. Где её взять, эту функцию? Из тех самых «кривых патчей» для того же Sparc32 или CRAY, как выше, да?
void* vs. char* это несущественная мелочь, не надо к этому цепляться.
Нет. В строке *func1((void )alloca + 1234); дело не в void * vs. char *. Ещё раз посмотрите на сигнатуру alloca()? Только внимательно. ;)