summaryrefslogtreecommitdiff
path: root/malloc/page_begin
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /malloc/page_begin
add: added projectsHEADmain
Diffstat (limited to 'malloc/page_begin')
-rw-r--r--malloc/page_begin/main.c21
-rw-r--r--malloc/page_begin/page_begin.c10
-rw-r--r--malloc/page_begin/page_begin.h8
3 files changed, 39 insertions, 0 deletions
diff --git a/malloc/page_begin/main.c b/malloc/page_begin/main.c
new file mode 100644
index 0000000..8fc931e
--- /dev/null
+++ b/malloc/page_begin/main.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+#include "page_begin.h"
+
+static void display_result(void *ptr, size_t page_size, void *expected_result)
+{
+ void *res = page_begin(ptr, page_size);
+
+ printf("ptr: %p\n", ptr);
+ printf("page_size: %lu\n", page_size);
+ printf("expected_result: %p\n", expected_result);
+ printf("result: %p\n", res);
+
+ printf(expected_result == res ? "OK\n" : "KO\n");
+}
+
+int main(void)
+{
+ display_result((void *)0x1234ffea, 4096, (void *)0x1234f000);
+ display_result((void *)0x1234ffea, 256, (void *)0x1234ff00);
+}
diff --git a/malloc/page_begin/page_begin.c b/malloc/page_begin/page_begin.c
new file mode 100644
index 0000000..ebb1842
--- /dev/null
+++ b/malloc/page_begin/page_begin.c
@@ -0,0 +1,10 @@
+#include "page_begin.h"
+
+void *page_begin(void *ptr, size_t page_size)
+{
+ char *a = ptr;
+ char *p = NULL;
+ size_t test = a - p;
+ void *res = (void *)(test & ~(page_size - 1));
+ return res;
+}
diff --git a/malloc/page_begin/page_begin.h b/malloc/page_begin/page_begin.h
new file mode 100644
index 0000000..ba467d5
--- /dev/null
+++ b/malloc/page_begin/page_begin.h
@@ -0,0 +1,8 @@
+#ifndef PAGE_BEGIN_H
+#define PAGE_BEGIN_H
+
+#include <stddef.h>
+
+void *page_begin(void *ptr, size_t page_size);
+
+#endif /* !PAGE_BEGIN_H */