[nginx] Core: improved NGX_ALIGNMENT detection on some x86_64 platforms.

noreply at nginx.com noreply at nginx.com
Fri Apr 18 19:58:03 UTC 2025


details:   https://github.com/nginx/nginx/commit/b9d0ba6677ff7761c85f5556776d6a6c2a7a7051
branches:  master
commit:    b9d0ba6677ff7761c85f5556776d6a6c2a7a7051
user:      Aleksei Bavshin <a.bavshin at nginx.com>
date:      Tue, 14 Jan 2025 10:32:24 -0800
description:
Core: improved NGX_ALIGNMENT detection on some x86_64 platforms.

Previously, the default pool alignment used sizeof(unsigned long), with
the expectation that this would match to a platform word size.  Certain
64-bit platforms prove this assumption wrong by keeping the 32-bit long
type, which is fully compliant with the C standard.

This introduces a possibility of suboptimal misaligned access to the
data allocated with ngx_palloc() on the affected platforms, which is
addressed here by changing the default NGX_ALIGNMENT to a pointer size.

As we override the detection in auto/os/conf for all the machine types
except x86, and Unix-like 64-bit systems prefer the 64-bit long, the
impact of the change should be limited to Win64 x64.

---
 src/core/ngx_config.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index 1861be601..707ab216b 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -94,7 +94,7 @@ typedef intptr_t        ngx_flag_t;
 
 
 #ifndef NGX_ALIGNMENT
-#define NGX_ALIGNMENT   sizeof(unsigned long)    /* platform word */
+#define NGX_ALIGNMENT   sizeof(uintptr_t)    /* platform word */
 #endif
 
 #define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1))


More information about the nginx-devel mailing list