코드
#include "stdafx.h" int main(int argc, char* argv[]) printf("a1 : %p\n", &a1); auto lambda1 = [a1]{ printf("lambda1(a1) : %p\n", &a1); }; auto lambda2 = [&a1]{ printf("lambda2(&a1) : %p\n", &a1); }; auto lambda3 = [&a1, &a2]{ printf("lambda3(&a1, &a2) : %p, %p\n", &a1, &a2); }; auto lambda3_1 = [a1, a2]{ printf("lambda3_1(&a1, &a2) : %p, %p\n", &a1, &a2); }; auto lambda4 = [=]{ printf("lambda4(=) : %p, %p, %p, %p\n", &a1, &a2, &a3, &a4); }; auto lambda5 = [&]{ printf("lambda5(&) : %p, %p, %p, %p\n", &a1, &a2, &a3, &a4); }; return 0; |
실행 결과
a1 : 002BF9E8 a2 : 002BF9EC a3 : 002BF9F8 a4 : 002BF9FC lambda1 : 002BF9F0 lambda1(a1) : 002BF9F0 lambda2 : 002BF9F4 lambda2(&a1) : 002BF9E8 lambda3 : 002BFA00 lambda3(&a1, &a2) : 002BF9E8, 002BF9EC lambda3_1 : 002BFA08 lambda3_1(a1, a2) : 002BFA08, 002BFA0C lambda4 : 002BFA10 lambda4(=) : 002BFA10, 002BFA14, 002BFA18, 002BFA1C lambda5 : 002BFA20 lambda5(&) : 002BF9E8, 002BF9EC, 002BF9F8, 002BF9FC |
lambda 함수를 auto에 넣었고, auto 자체도 스택에 자리를 차지하고 있으며
auto의 크기는 캡쳐된 변수들의 크기만큼 커졌다.
코드
#include "stdafx.h" int main(int argc, char* argv[]) printf("a1 : %p\n", &a1); [a1]{ printf("lamda1(a1) : %p\n", &a1); }(); int temp1; [&a1]{ printf("lamda2(&a1) : %p\n", &a1); }(); int temp2; [&a1, &a2]{ printf("lamda3(&a1, &a2) : %p, %p\n", &a1, &a2); }(); int temp3; [a1, a2]{ printf("lamda3_1(a1, a2) : %p, %p\n", &a1, &a2); }(); int temp4; [=]{ printf("lamda4(=) : %p, %p, %p, %p\n", &a1, &a2, &a3, &a4); }(); int temp5; [&]{ printf("lamda5(&) : %p, %p, %p, %p\n", &a1, &a2, &a3, &a4); }(); return 0; |
실행 결과
a1 : 003CFC84 a2 : 003CFC80 a3 : 003CFC78 a4 : 003CFC7C lamda1(a1) : 003CFC74 temp1 : 003CFC64 lamda2(&a1) : 003CFC84 temp2 : 003CFC60 lamda3(&a1, &a2) : 003CFC84, 003CFC80 temp3 : 003CFC5C lamda3_1(a1, a2) : 003CFC70, 003CFC74 temp4 : 003CFC58 lamda4(=) : 003CFC68, 003CFC6C, 003CFC70, 003CFC74 temp5 : 003CFC54 lamda5(&) : 003CFC84, 003CFC80, 003CFC78, 003CFC7C |
람다에서 캡쳐한 변수들의 크기만큼 메모리가 커졌다 작아졌다 한다.
그냥 일반 함수 처리할때와 동일한듯 하다.
코드
#include "stdafx.h" int main(int argc, char* argv[]) auto lambda1 = [a1]{ for(int i=0; i<10000; ++i); }; auto lambda5 = [=]{ int b=a1; b=a2; }; auto lambda6 = []{ int b; }; printf("sizeof(lambda1) : %d\n", sizeof(lambda1 )); |
실행결과
sizeof(lambda1) : 4 sizeof(lambda1_1) : 4 sizeof(lambda2) : 8 sizeof(lambda2_1) : 8 sizeof(lambda3) : 12 sizeof(lambda3_1) : 12 sizeof(lambda4) : 1 sizeof(lambda4_1) : 1 sizeof(lambda5) : 8 sizeof(lambda5_1) : 8 sizeof(lambda6) : 1 sizeof(lambda6_1) : 1 |
[&], [=]를 사용할 경우 내부에서 참조하는 개수만큼의 사이즈가 나온다.
[]로 하면 람다의 사이즈는 1이다.
참고
빈 클래스의 사이즈가 1이다.
'Develop' 카테고리의 다른 글
mysql 유일한값 뽑아내기 (0) | 2012.11.08 |
---|---|
lambda 호출시간? (0) | 2012.05.30 |
hg convert (0) | 2012.05.04 |
Boost::any (0) | 2012.04.13 |
컴파일러 버젼 Define (0) | 2012.01.13 |