目录

前處理器

常見問題

C

常見問題

語言相關

#include <stdio.h>
 
int main()
{
  // 將整型 (int) -1,即 ffffffff,轉型成 size_t,進而得到 size_t 的最大值。
  // (~(size_t)0)
  size_t length = (size_t)-1;
 
  printf("max value of size_t: %zu\n", length);
  printf("sizeof(size_t): %lu\n", sizeof(size_t));
}
// $ cat /proc/`pidof mmap`/maps
// 00000000-100000000 rwxp 00000000 00:00 0
// 100000000-100001000 r-xp 00000000 00:0f 24080529                         /nfs_home/chenwj/tmp/mmap
 
#include <sys/mman.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
 
// 4 * 1024 * 1024 * 1024 的寫法,會因為 4 預設型別為 int 而導致 overflow。
#define DEFAULT_CODE_GEN_BUFFER_SIZE (4UL << 30)
 
int main()
{
    void *ptr;
    size_t code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
    int flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED;
 
    // gcc -Wl,-Ttext-segment=0x100000000 -fPIE -pie hello.c -o hello
    // mmap 映射虛擬位址 4G 以下所有空間。
     ptr = mmap(0, code_gen_buffer_size,
               PROT_WRITE | PROT_READ | PROT_EXEC,
               flags, -1, 0);
 
    if (ptr == MAP_FAILED)
    {
        printf("mmap failed!\n");
        abort();
    }
 
    printf("ptr: 0x%016lx\n", (unsigned long)ptr);
 
    sleep(100);
}

工作學習

轉換編碼

其它

外部連結