Named Return Value Optimization in Visual C++ 2005


Here is white paper that I will soon be submitting. Feel free to leave your comments.


The Microsoft VC++ optimizing compiler is always looking for new techniques and optimizations to provide the programmer with higher performance when possible. This article will show how the compiler tries to eliminate redundant Copy constructor and Destructor calls in various situations.


Typically when a method returns an instance of an object, a temporary object is created and copied to the target object via the copy constructor. The C++ standard allows the elision of the copy constructor (even if this results in different program behavior) which has a side effect of enabling the compiler to treat both objects as one (see section 12.8. Copying class objects, paragraph 15). The VC8.0 compiler makes use of the flexibility that the standard provides and adds a new feature which is the Named Return Value Optimization (NRVO). NRVO eliminates the copy constructor and destructor of a stack based return value. This optimizes out the redundant copy constructor and destructor calls and thus improves overall performance. It is to be noted that this could lead to different behavior between optimized and non optimized programs (see optimization side effects section).


There are some cases in which the optimization will not take place (see Optimization Limitations section for samples).  The more common ones are:


a)     Different paths returning different named objects.


b)     Multiple return paths (even if the same named object is returned on all paths) with EH states introduced.


c)      The named object returned is referenced in an inline asm block.


 


Optimization Description


Here is a simple example in Figure 1 to illustrate the optimization and how it is implemented:


A MyMethod (B &var)


{


          A retVal;


          retVal.member = var.value + bar(var);


          return retVal;


}


Figure 1 – Original Code


 


The program that uses the above function may have a construct such as:


valA = MyMethod(valB);


 


That value that is returned from MyMethod is created in the memory space pointed to by ValA through the use of hidden argument. Here is what the function looks like when we expose the hidden argument and explicitly show the constructors and destructors:


A MyMethod (A &_hiddenArg, B &var)


{


          A retVal;


          retVal.A::A(); // constructor for retVal


          retVal.member = var.value + bar(var);


          _hiddenArg.A::A(retVal);  // the copy constructor for A


          return;


retVal.A::~A();  // destructor for retVal


 


}


Figure 2 – Hidden argument code without NRVO (pseudo code)


 


From the above code, it is noticeable that there are some optimization opportunities available. The basic idea is to eliminate the temporary stack based value (retVal) and use the hidden argument. Consequently, this will eliminate the copy constructor and destructor of the stack based value. Here is the NRVO based optimized code:


 


A MyMethod(A &_hiddenArg, B &var)


{


          _hiddenArg.A::A();


          _hiddenArg.member = var.value + bar(var);


          Return


}


Figure 3 – Hidden argument code with NRVO (pseudo code)


 


Code Samples


Sample 1: Simple Example:


#include <stdio.h>


class RVO


{


public:


               


            RVO(){printf("I am in constructor\n");}


            RVO (const RVO& c_RVO) {printf ("I am in copy constructor\n");}


            ~RVO(){printf ("I am in destructor\n");}


            int mem_var;        


};


RVO MyMethod (int i)


{


            RVO rvo;


            rvo.mem_var = i;


            return (rvo);


}


int main()


{


            RVO rvo;


            rvo=MyMethod(5);


}


Figure 4 – Sample1.cpp


 


Compiling sample1.cpp with and without NRVO turned on will yield different behavior.


Without NRVO (cl /Od sample1.cpp), the expected output would be:


          I am in constructor


I am in constructor


I am in copy constructor


I am in destructor


I am in destructor


I am in destructor


 


With NRVO (cl /O2 sample1.cpp), the expected output would be:


I am in constructor


I am in constructor


I am in destructor


I am in destructor


 


 


Sample 2: More complex sample:


#include <stdio.h>


class A {


  public:


    A() {printf ("A: I am in constructor\n");i = 1;}


    ~A() { printf ("A: I am in destructor\n"); i = 0;}


    A(const A& a) {printf ("A: I am in copy constructor\n"); i = a.i;}


    int i, x, w;


};


 class B {


  public:


    A a;


    B()  { printf ("B: I am in constructor\n");}


    ~B() { printf ("B: I am in destructor\n");}


    B(const B& b) { printf ("B: I am in copy constructor\n");}


};


A MyMethod()


{


    B* b = new B();


    A a = b->a;


    delete b;


    return (a);


}


int main()


{


    A a;


    a = MyMethod();


}


Figure 5 – Sample2.cpp


 


The output without NRVO (cl /Od sample2.cpp) will look like:


A: I am in constructor


A: I am in constructor


B: I am in constructor


A: I am in copy constructor


B: I am in destructor


A: I am in destructor


A: I am in copy constructor


A: I am in destructor


A: I am in destructor


A: I am in destructor


 


While when the NRVO optimization kicks in (cl /O2 sample2.cpp), the output will be:


A: I am in constructor


A: I am in constructor


B: I am in constructor


A: I am in copy constructor


B: I am in destructor


A: I am in destructor


A: I am in destructor


A: I am in destructor


 


Optimization Limitations:


There are some cases where the optimization won’t actually kick in. Here are few samples of such limitations:


 


Sample 3: Exception Sample:


In the face of exceptions the hidden argument must be destructed within the scope of the temporary that it is replacing. To illustrate:


//RVO class is defined above in figure 4


#include <stdio.h>


RVO MyMethod (int i)


{


            RVO rvo;


            rvo.mem_var = i;


            throw "I am throwing an exception!";


            return (rvo);


}


int main()


{


            RVO rvo;


            try


            {


                        rvo=MyMethod(5);


            }


            catch (char* str)


            {


                        printf ("I caught the exception\n");


            }


}


Figure 6 – Sample3.cpp


 


Without NRVO (cl /Od /EHsc sample3.cpp), the expected output would be:


I am in constructor


I am in constructor


I am in destructor


I caught the exception


I am in destructor


 


If the “throw” gets commented out, the output will be:


I am in constructor


I am in constructor


I am in copy constructor


I am in destructor


I am in destructor


I am in destructor


 


Now, if the “throw” gets commented out and the NRVO gets triggered in, the output will look like:


I am in constructor


I am in constructor


I am in destructor


I am in destructor


 


That is to say, sample3.cpp as it is in Figure 6 will behave the same with and without NRVO.


 


Sample 4: Different Named Object Sample:


To make use of the optimization all exit paths must return the same named object. To illustrate consider sample4.cpp:


#include <stdio.h>


class RVO


{


public:


               


            RVO(){printf("I am in constructor\n");}


            RVO (const RVO& c_RVO) {printf ("I am in copy constructor\n");}


            int mem_var;        


};


RVO MyMethod (int i)


{


            RVO rvo;


            rvo.mem_var = i;


                        if (rvo.mem_var == 10)


                                    return (RVO());


            return (rvo);


}


int main()


{


            RVO rvo;


            rvo=MyMethod(5);


}


Figure 7 – Sample4.cpp


 


The output while optimizations are enabled (cl /O2 sample4.cpp) is the same as not enabling any optimizations (cl /Od sample.cpp). The NRVO doesn’t actually take place since not all return paths return the same named object.


I am in constructor


I am in constructor


I am in copy constructor


 


If you change the above sample to return rvo (as shown below in figure8àsample4.cpp modified) in all exit paths, the optimization will eliminate the copy constructor:


 


#include <stdio.h>


class RVO


{


public:


               


            RVO(){printf("I am in constructor\n");}


            RVO (const RVO& c_RVO) {printf ("I am in copy constructor\n");}


            int mem_var;        


};


RVO MyMethod (int i)


{


            RVO rvo;


                        if (i==10)


                                    return (rvo);


                        rvo.mem_var = i;


            return (rvo);


}


int main()


{


            RVO rvo;


            rvo=MyMethod(5);


}


Figure 8 – Sample4_Modified.cpp modified to make use of NRVO


 


The output (cl /O2 Sample4_Modified.cpp) will look like:


I am in constructor


I am in constructor


 


Sample 5: EH Restriction Sample:


Figure 9 below illustrates the same sample as in figure 8 except with the addition of a destructor to the RVO class. Having multiple return paths and introducing such a destructor creates EH states in the function. Due to the complexity of the compiler’s tracking which objects needs to be destructed, it avoids the return value optimization. This is actually something that the VC 2005 will need to improve in the future.


//RVO class is defined above in figure 4


#include <stdio.h>


RVO MyMethod (int i)


{


            RVO rvo;


                        if (i==10)


                                    return (rvo);


                        rvo.mem_var = i;


            return (rvo);


}


int main()


{


            RVO rvo;


            rvo=MyMethod(5);


}


Figure 8 – Sample5.cpp


 


Compiling Sample5.cpp with and without optimization will yield the same result:


I am in constructor


I am in constructor


I am in copy constructor


I am in destructor


I am in destructor


I am in destructor


 


To make use of NRVO, try to eliminate the multiple return points in such cases by changing MyMethod to be something like:


RVO MyMethod (int i)


{


            RVO rvo;


                        if (i!=10)


                                    rvo.mem_var = i;


                        return(rvo); 


}


 


Sample 6: Inline asm Restriction:


Another case where the compiler avoids performing NRVO is the when the named return object is referenced in an inline asm block. To illustrate, consider the below sample (sample6.cpp):


#include <stdio.h>


//RVO class is defined above in figure 4


RVO MyMethod (int i)


{


            RVO rvo;


__asm {


                        mov eax,rvo      //comment this line out for RVO to kick in


                        mov rvo,eax //comment this line out for RVO to kick in


                        }


            return (rvo);


}


int main()


{


            RVO rvo;


            rvo=MyMethod(5);


}


Figure 9 – Sample6.cpp


 


Compiling sample6.cpp with optimization turned on (cl /O2 sample6.cpp) will still not take advantage of NRVO. That is because the object returned was actually referenced in an inline asm block. Hence the output with and without optimizations will look like:


I am in constructor


I am in constructor


I am in copy constructor


I am in destructor


I am in destructor


I am in destructor


 


From the output, it is clear that the elimination of the copy constructor and destructor calls did not take place. If the asm block gets commented out, such calls will get eliminated.


Optimization Side Effects:


The programmer should be aware that such optimization might affect the flow of the application. The following example illustrates such a side effect:


#include <stdio.h>


int NumConsCalls=0;


int NumCpyConsCalls=0;


class RVO


{


public:


               


            RVO(){NumConsCalls++;}


            RVO (const RVO& c_RVO) {NumCpyConsCalls++;}


};


RVO MyMethod ()


{


            RVO rvo;


            return (rvo);


}


void main()


{


           RVO rvo;


           rvo=MyMethod();


                int Division = NumConsCalls / NumCpyConsCalls;


                printf ("Constructor calls / Copy constructor calls = %d\n",Division);


}


Figure 10 – Sample7.cpp


 


Compiling Sample7.cpp with no optimizations enabled (cl /Od sample7.cpp) will yield what most users expect. The “constructor” is called twice and the “copy constructor” is called once and hence the division (2/1) yields 2.


 


Constructor calls / Copy constructor calls = 2


 


On the other hand, if the above code gets compiled with optimization enabled (cl /O2 sample7.cpp), The NRVO will kick in and hence the “copy constructor” call will be eliminated. Consequently, NumCpyConsCalls will be ZERO leading to a division by ZERO exception which if not handled appropriately (as in sample7.cpp) might cause the application to crash.


 


 


References:


[1] The C++ Standard Incorporating Technical Corrigendum 1


 BS ISO/IEC 14882:2003 (Second Edition)


Thanks,


  Ayman B. Shoukry


  Program Manager, VC++ Team


Comments (79)

  1. "With NRVO (cl /O2 sample1.cpp), the expected output would be:

    I am in constructor

    I am in constructor

    I am in destructor

    I am in destructor"

    Figure 3 does list a ctor but not dtor :

    I do undestand the need for the Second constructor call, as an object-to-initial state necessity, but why there is still a dtor call ?

  2. Tuan Kuranes says:

    Besides, When I benchmark "hand optimized NRO" (Figure 3) against NRO ( Sample1.cpp with 02), I get much, much better speed (and not dtor call)

  3. AymanS says:

    The 2 destructors are for the 2 rvo objects. The one in main and the on in MyMethod.

    I would be interested in taking a look at tour benchmark sample.

    Thanks,

    Ayman Shoukry

  4. Tuan Kuranes says:

    I was under the impression that the object in MyMethod was not really created when nrvo enabled, so no dtor call needed. (as in "hand nrvo")

    Here are the bench :

    http://tuan.kuranes.free.fr/BenchMark.zip

  5. AymanS says:

    Only the copy constructor and destructor (resulting from the return) are eliminated. I am sure there are improvments that could be made. I wasn’t able to access the ZIP file you provided (page not found..i will probably try later once more).

    Thanks,

    Ayman Shoukry

  6. matar_gf says:

    <a href= http://index2.ghlpof.com >trailer of scary movie 4</a> <a href= http://index5.ghlpof.com >slicksexs</a> <a href= http://index4.ghlpof.com >extras for movies</a> <a href= http://index3.ghlpof.com >fat mature tgp</a> <a href= http://index1.ghlpof.com >breast play</a>

  7. 出会い says:

    ヒマだょ…誰かかまってぉ…会って遊んだりできる人募集!とりあえずメール下さい☆ uau-love@docomo.ne.jp

  8. カワイイ子ほど家出してみたくなるようです。家出掲示板でそのような子と出会ってみませんか?彼女たちは夕食をおごってあげるだけでお礼にHなご奉仕をしてくれちゃったりします

  9. 右脳左脳 says:

    あなたは右脳派?もしくは左脳派?隠されたあなたの性格分析が3分で出来ちゃう診断サイトの決定版!合コンや話のネタにも使える右脳左脳チェッカーを試してみよう

  10. セレブラブでは性欲のある男性を募集しています。セフレパートナーを探している20代・30代の女性たちが多数登録されています。セレブと遊びたい、Hがしたいという方は無料登録からどうぞ

  11. 逆援助 says:

    セレブ達は一般の人達とは接する機会もなく、その出会う唯一の場所が「逆援助倶楽部」です。 男性はお金、女性はSEXを要求する場合が多いようです。これは女性に圧倒的な財力があるから成り立つことの出来る関係ではないでしょうか?

  12. 救援部 says:

    貴方のオ○ニーライフのお手伝い、救援部でHな見せたがり女性からエロ写メ、ムービーをゲットしよう!近所の女の子なら実際に合ってHな事ができちゃうかも!?夏に向けて開放的になっている女の子と遊んじゃおう

  13. 家出 says:

    家出中でネットカフェやマンガ喫茶にいる女の子たちは、お金が無くなり家出掲示板で今晩泊めてくれる男性を探しています。ご飯を食べさせてあげたり泊めてあげることで彼女たちはHなお礼をしてくれる事が多いようです

  14. 当サイトは、みんなの「勝ち組負け組度」をチェックする性格診断のサイトです。ホントのあなたをズバリ分析しちゃいます!勝ち組負け組度には、期待以上の意外な結果があるかもしれません

  15. 素人 says:

    男性が主役の素人ホストでは、男性のテクニック次第で女性会員様から高額な謝礼がもらえます。欲求不満な人妻や、男性と出会いが無い女性が当サイトで男性を求めていらっしゃいます。興味のある方はTOPページからどうぞ

  16. エロ漫画 says:

    エロ漫画やエロゲーなどでかわいい女の子が淫らな肉欲に溺れる様子をみて「こんなの現実にあるわけない」そう思った事ありませんか?それが当サイトでは現実に実現できるのです!羨ましさを憶えた2次元の中での出来事。あなたと同じように望む女の子が当サイトに集まっているのです

  17. 高級チェリーの夏は童貞卒業の夏です。セレブ達も童貞を卒業させたくてウズウズしながら貴方との出会いを待っています。そんなセレブ達に童貞を捧げ、貴方もハッピーライフを送ってみませんか

  18. 助けて〜! says:

    何回かメールして会える人一緒に楽しいことしょ?お給料もらったばかりだからご飯くらいならごちそうしちゃうょ♪ cha-a@docomo.ne.jp とりあえずメールくださぃ★

  19. セレブラブではココロとカラダに癒しを求めるセレブ達と会って頂ける男性を募集しています。セレブ女性が集まる当サイトではリッチな彼女たちからの謝礼を保証、安心して男性はお金、女性は体の欲求を満たしていただけます。無料登録は当サイトトップページからどうぞ

  20. SOS少女 says:

    家出中でお金が無く、ネットカフェを泊り歩いているSOS少女たちは、家出掲示板で泊めてくれたり遊んでくれる男性を探しています。泊めてあげたりすると彼女たちはHなお礼をしてくれるかもしれません。家出少女と遊びたい方は当サイトはどうぞ

  21. 精神年齢 says:

    あなたの精神年齢を占ってみよう!当サイトは、みんなの「精神年齢度」をチェックする性格診断のサイトです。精神年齢度には、期待以上の意外な結果があるかも??興味がある方はぜひどうぞ

  22. マダムと甘い時間を過ごしてみませんか?性欲を持て余しているセレブたちは出張ホストサービスで男性を探し、セックスを求めているのです。ホスト希望の方なら容姿や年齢は一切不問!ご近所の女性を探して、多額の報酬をゲットしよう

  23. 楽しく、気持ちよく絶頂を味わえることで若い女性から熟女の女性まで幅広い世代で爆発的な人気がある、スローセックス。当サイトはプレイに興味がある、あるいは試してみたいけれど相手がいない…といった方の支援サイトです。当サイトでSEXパートナーを探してみませんか

  24. 夏真っ盛り!女の子は開放的な気分で一人エッチしたくてウズウズしてるっ!!貴方は女の子のオナ○ーを見て気分を高めてあげてネ!!もちろん、お手伝いしてもオッケーだよ!!さぁ、今すぐ女の子にアクセスしよっ

  25. メル友募集 says:

    恋することって怖くないですか?最近ちょっと臆病になってて…そういうの抜きでえっちなことしたくて… lovely-i0709@docomo.ne.jp優しい人がいたらメール待ってます☆

  26. 逆円助 says:

    さあ、今夏も新たな出会いを経験してみませんか?当サイトは円助交際の逆、つまり女性が男性を円助する『逆円助交際』を提供します。逆円交際を未経験の方でも気軽に遊べる大人のマッチングシステムです。年齢上限・容姿・経験一切問いません。男性の方は無料で登録して頂けます。貴方も新たな出会いを経験してみませんか

  27. 精神年齢 says:

    みんなの精神年齢を測定できる、メンタル年齢チェッカーで秘められた年齢がズバリわかっちゃう!かわいいあの子も実は精神年齢オバサンということも…合コンや話のネタに一度チャレンジしてみよう

  28. 童貞卒業 says:

    童貞卒業を考えているなら、迷わずココ!今まで童貞とヤッた事がない女性というのは意外と多いものです。そんな彼女たちは一度童貞とやってみたいと考えるのは自然な事と言えるでしょう。当サイトにはそんな好奇心旺盛な女性たちが登録されています

  29. 素人 says:

    素人ホストでは日頃のストレスを発散したい、もう一度恋がしたい、そういた女性が癒しを求めて登録されています。当サイトは癒やされたい女性・寂しい女性を癒やす男性が集うカップリングサイトです

  30. 熟女 says:

    熟女だって性欲がある、貴方がもし人妻とSEXしてお金を稼ぎたいのなら、一度人妻ワイフをご利用ください。当サイトには全国各地からお金持ちのセレブたちが集まっています。女性から男性への報酬は、 最低15万円からと決めております。興味のある方は一度当サイト案内をご覧ください

  31. メル友募集 says:

    恥ずかしいけどやらしいことしたくてしょうがありません…誰か一緒にしてくれませんか?とりあえず連絡待ってます☆ cute.y.0902@docomo.ne.jp

  32. オナニー says:

    女の子のオナニーを手伝って報酬をもらう仕事に興味はありませんか?新感覚SNSの当サイトで見るだけで3万円、お手伝いで5万円の高額アルバイトを始めてみたい方は当サイトへどうぞ。

  33. SOS娘 says:

    家出娘や一人で寂しい子が書き込むSOS娘BBSでは彼女たちと遊んであげたり泊めてあげれる、優しい人を募集しています。見返りにHをしてくれる子も多く、いろんな理由がある少女があなたの助けを待っています。

  34. 話題の小向美奈子ストリップを盗撮!入念なボディチェックをすり抜けて超小型カメラで撮影した神動画がアップ中!期間限定配信の衝撃的映像を見逃すな

  35. 高額報酬 says:

    当サイトではリッチなセレブと割り切りでお付き合いしてくださる男性を募集しています。女性の性欲を満たし、高額報酬をもらって楽しく暮らしてみませんか?興味がある方はバイト感覚での1日登録もできる、安心の無料入会を今すぐどうぞ。

  36. mixi says:

    mixiで禁止された「出会い」コミュニティーが復活しているのをご存じですか?当サイトでは規制前の楽しかった頃のミクシーを再現しているという好評を頂いております。会員数も右肩上がりに増えていますので、興味のある方はぜひご覧ください

  37. 素人 says:

    癒されたい女性や、寂しい素人女性を心も体も癒してあげるお仕事をご存じですか?女性宅やホテルに行って依頼主の女性とHしてあげるだけで高額の謝礼を手に入れる事が出来るのです。興味のある方は当サイトTOPページをご覧ください

  38. メル友募集 says:

    最近してないし欲求不満です。一緒にいやらしいことしませんか?エッチには自信あるよ(笑) nyaon.chuki@docomo.ne.jp メール待ってるよ☆

  39. 家出 says:

    最近TVや雑誌で紹介されている家出掲示板では、全国各地のネットカフェ等を泊り歩いている家出娘のメッセージが多数書き込みされています。彼女たちはお金がないので掲示板で知り合った男性の家にでもすぐに泊まりに行くようです。あなたも書き込みに返事を返してみませんか

  40. 動物占い says:

    あなたの性格を、動物に例えて占っちゃいます。もしかしたらこんな動物かも!?動物占いをうまく使って、楽しい人間関係を築いてください

  41. 救援部 says:

    当サイト、救援部では無料でオ○ニー動画を見ることができます。ご近所検索機能でリアルタイムオ○ニーを見るチャンスも高く、興奮間違いなしです。また、一人Hのお手伝いを希望されるセレブ女性もあり、お手伝いいただけた方には高額謝礼をお支払いしております。

  42. 家出 says:

    家出中の女性や泊まる所が無い女性達がネットカフェなどで、飲み放題のドリンクで空腹を満たす生活を送っています。当サイトはそんな女性達をサポートしたいという人たちと困っている女性たちの為のサイトです

  43. セレブ女性との割り切りお付き合いで大金を稼いでみませんか?女性に癒しと快楽、男性に謝礼とお互い満たしあえる当サイト、セレブラブはあなたの登録をお待ちしております。

  44. 夏フェス!! says:

    誰か満足させてくれる人いませんか?めんどくさいこと抜きでしよっ♪ gu-gu-m@docomo.ne.jp とりあえずメールして☆

  45. 逆円 says:

    全国各地の女性会員様の性欲を満たし、割り切ったアルバイト感覚で稼げる逆円バイト。報酬は平均で1回5〜10万円となっております。興味のある方は当サイト新規無料エントリーからお早めにどうぞ

  46. 家出 says:

    家出をして不安な少女の書込みが当、家出掲示板では増えています。泊まらせてあげたり、一日遊んであげるだけで彼女たちはあなたを神と呼び、精一杯のお礼をしてくれるはずです

  47. あなたのゲーマー度を無料ゲーム感覚で測定します。15個の質問に答えるだけの簡単測定で一度遊んでみませんか?ゲームが得意な人もそうでない人もぜひどうぞ。

  48. 素人 says:

    Hな女性たちは素人ホストを自宅やホテルに呼び、ひとときの癒しを求めていらっしゃいます。当サイトでは男性ホスト様の人員が不足しており、一日3〜4人の女性の相手をするホストもおられます。興味を持たれた方は当サイトにぜひお越しください

  49. 出会い系 says:

    実は出会い系には…関係者用入り口があるのを知っていますか?広告主やスポンサー用に用意されたIDではサクラや業者が立ち入ることが出来ないようになっているのです。当サイトでは極秘に入手した関係者用URLが公開されています

  50. 逆援助 says:

    男性はお金、女性は快楽を得る逆援助に興味はありませんか?お金を払っても性的欲求を満たしたいセレブ達との割り切り1日のお付き合いで当サイトでは大金を得ることができます。無料登録なのでアルバイト感覚でOK、詳しくはTOPページでどうぞ。

  51. 友達募集 says:

    自分のほむぺ初公開でぇす。やっと完成したのでみんなに見てもらいたくて★カキコしました。意見ある方めぇるまってまぁす。 ggg.nj@docomo.ne.jp

  52. 出会い says:

    セクース好きな女性が集まる★男性との性なる夜を求めた女性達が多数登録しております!セフレ出会いサイト☆セクフレ☆で夏休み中でヒマを持て余している女子○生から、刺激を求めるOLまでみんなまとめてオイシイ関係になっちゃおう

  53. 家出 says:

    夏休みで気軽に家出する女子○生が急増しています。しかし家出したはいいものの泊る所やお金が無い彼女たちは、掲示板などで泊めてくれる男性を探す子も多いようです。当掲示板にも夏休みに入ってから通常の3倍以上のメッセージが寄せられています

  54. あなたの真のH度を診断できるHチェッカー!コンパや飲み会で盛り上がること間違いなしのおもしろツールでみんなと盛り上がろう

  55. 逆円 says:

    今夏も新たな出会いを経験してみませんか?当サイトは円交の逆、つまり女性が男性を円助する『逆円交際』を提供します。未経験の方でも気軽に遊べる大人のマッチングシステムです。年齢上限・容姿・経験一切問いません。男性の方は無料で登録して頂けます。貴方も新たな出会いを経験してみませんか

  56. 人妻 says:

    今最もアツイバイトは人妻とのセフレ契約です。当サイトではお金を払ってでもセフレがほしい人妻が集まり、男性会員様との逆援生活を待っています。当サイトで欲求不満の女性との出会いをしてみませんか

  57. 素人 says:

    素人ホストでは、男性のテクニック次第で女性会員様から高額な謝礼がもらえます。欲求不満な人妻や、男性と出会いが無い女性達が当サイトで男性を求めていらっしゃいます。興味のある方はTOPページからどうぞ

  58. さゆのプロフィールが完成しましたぁ。記念すべき初プロフをネットに公開してみました。ドキドキしてるので優しい感想メールしてくれたら心和むかもでぇす po.tomoe.oq@docomo.ne.jp

  59. 熟女 says:

    当サイトではセレブ熟女の性欲を満たしてくれる男性に高額謝礼をお支払いし、デートや一晩のSEX、月契約など選べる逆援出会いの場を作っております。アルバイト感覚でもお待ちしておりますので当サイトで無料登録をどうぞ

  60. 家出 says:

    カワイイ子ほど家出してあそんでみたくなるようです。家出掲示板でそのような子と出会ってみませんか?彼女たちは夕食をおごってあげるだけでお礼にHなご奉仕をしてくれちゃったりします

  61. 逆援助 says:

    出会ぃも今は逆援助!オンナがオトコを買う時代になりました。当サイトでは逆援希望のセレブ女性が男性を自由に選べるシステムを採用しています。経済的に成功を収めた女性ほど金銭面は豊かですが愛に飢えているのです。興味のある方はどうぞ

  62. 出会い says:

    即ハメセレブは完全無料でご利用できる出会いコミュニティです。今までにない実績で、あなたの希望に合った人をお探しします。毎月考えられない豪華なイベントを開催しているので出会いを保障します

  63. 救援部 says:

    夏真っ盛り!女の子は開放的な気分で一人Hしたくてウズウズしてるっ!貴方は女の子のオ○ニーを見て気分を高めてあげてネ!もちろん、お手伝いしてもオッケーだよ!さぁ、今すぐ救援部にアクセスしよっ

  64. メル友 says:

    プロフ見て興味ある方は連絡ください。基本的には携帯依存症なぐらい携帯いじるのとかメールするの好きなのでまずはメアドから交換しましょう。仲良くなったら電話もおっけーなんでよろしくo.natyu.natyu.o@docomo.ne.jp

  65. 出会い says:

    大好評の逆ナンイベントが毎週開催決定!素敵な出会いのきっかけ探し・アイナビにきませんか?積極的な出会いを求める人達なら無料参加OK!あなたもほんの少しの勇気で素敵な彼氏・彼女をGETしちゃおう!

  66. 家出 says:

    夏休みで家出する女の子が急増しています。最初はマンガ喫茶やネットカフェで過ごすことが多いようですが、すぐにお小遣いが無くなり家出掲示板で泊めてくれたり遊んでくれる男性を探す子が多いようです。当サイトはそんな女の子達をサポートしたいという人たちと困っている女性たちの為のサイトです

  67. 当サイトは、みんなの「玉の輿度」をチェックする性格診断のサイトです。ホントのあなたをズバリ分析しちゃいます!玉の輿度チェッカーの診断結果には、期待以上の意外な結果があるかも

  68. 毎月10万円を最低ラインとする謝礼を得て、セレブ女性に癒しを与える仕事があります。無料登録した後はメールアプローチを待つだけでもOK、あなたもセレブラブで欲求を満たしあう関係を作ってみませんか

  69. よーやくプロフ持ちになれました。私の事気になった方がいましたら気軽にメールください。恋バナとか好きなんでよろしくでぇす。zuttozuttoissyodayo@docomo.ne.jp

  70. 女性会員様増加につき、当サイトの出張ホストが不足中です。女性の自宅やホテルに出向き、欲望を満たすお手伝いをしてくれる男性アルバイトをただいま募集していますので、興味のある方はTOPページから無料登録をお願いいたします

  71. 家出 says:

    最近様々なメディアで紹介されている家出掲示板では、全国各地のネットカフェ等を泊り歩いている家出少女のメッセージが多数書き込みされています。彼女たちはお金がないので掲示板で知り合った男性とすぐに遊びに行くようです。あなたも書き込みに返事を返してみませんか

  72. あなたのモテ度数を診断できる、モテる度チェッカー!日頃モテモテでリア充のあなたもそうでないヒキニートの貴方も隠されたモテスキルを測定して今以上にモッテモテになること間違いなし

  73. 救援部 says:

    オ○ニーライフのお手伝い、救援部でHな見せたがり女性からエロ写メ、ムービーをゲットしよう!近所の女の子なら実際に合ってHな事ができちゃうかも!?夏で開放的になっている女の子と遊んじゃおう

  74. 逆援助 says:

    メル友募集のあそび場「ラブフリー」はみんなの出逢いを応援する全国版の逆援助コミュニティーです!女の子と真剣にお付き合いしたい方も、複数の女性と戯れたい方も今すぐ無料登録からどうぞ

  75. 倶楽部 says:

    簡単にお小遣い稼ぎをしたい方必見、当サイト逆¥倶楽部では無料登録して女性の性の欲求に応えるだけのアルバイトです。初心者でもすぐに高収入の逆¥交際に興味をもたれた方はTOPページまでどうぞ。

  76. プロフ作りました。興味ある方連絡まってま〜す。メアドを乗せておくので連絡ください。色んな人の色んな話聞きたい感じですのでヨロシクhappy-my-life-.-@docomo.ne.jp

Skip to main content