<commit_before>---
title: C RELOCHIDE Macro
category: Language
date: {}
lastmod: {}
comment: true
adsense: true
published: true
---

### 1. Macro

{% highlight C %}
#define RELOC_HIDE(ptr, off)                    \
  ({ unsigned long __ptr;                       \
    __asm__ ("" : "=r"(__ptr) : "0"(ptr));      \
    (typeof(ptr)) (__ptr + (off)); })
{% endhighlight %}

### 2. 설명

* **ptr + off**을 Return한다.
* Compiler의 최적화 기법에 의해서 발생할 수 있는 Error를 제거한다.
* **__asm__ ("" : "=r"(__ptr) : "0"(ptr))**는 **__ptr = ptr**와 동일하다. 이 Inline asm에 의해서 Compiler는 최적화를 하지 못한다.

### 3. 참조
* [http://studyfoss.egloos.com/viewer/5374731](http://studyfoss.egloos.com/viewer/5374731)
<commit_msg>Updated C_RELOCHIDE_Macro.md<commit_after>---
title: C RELOCHIDE Macro
category: Language
date: 2017-01-22T14:10:00.000Z
lastmod: 2017-01-22T14:55:00.000Z
comment: true
adsense: true
published: true
---

### 1. Macro

{% highlight C %}
#define RELOC_HIDE(ptr, off)                    \
  ({ unsigned long __ptr;                       \
    __asm__ ("" : "=r"(__ptr) : "0"(ptr));      \
    (typeof(ptr)) (__ptr + (off)); })
{% endhighlight %}

### 2. 설명

* **ptr + off**을 Return한다.
* Compiler의 최적화 기법에 의해서 발생할 수 있는 Error를 제거한다.
* **__asm__ ("" : "=r"(__ptr) : "0"(ptr))**는 **__ptr = ptr**와 동일하다. 이 Inline asm에 의해서 Compiler는 최적화를 하지 못한다.

### 3. 참조
* [http://studyfoss.egloos.com/viewer/5374731](http://studyfoss.egloos.com/viewer/5374731)

{'fraction_non_alphanumeric': 0.19238900634249473, 'fraction_numerical': 0.0507399577167019, 'mean_word_length': 2.848238482384824, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4919883', 'n_tokens_mistral': 696, 'n_tokens_neox': 677, 'n_words': 129}