Entries for tag "visual studio", ordered from most recent. Entry count: 62.
# MMX i SSE
Sat
29
Nov 2008
Osobny temat w rozdziale MSDN Library "Compiler Intrinsics" stanowią funkcje i typy do obsługi SIMD, czyli rozszerzeń wektorowych procesora (MMX, 3DNow!, SSE).
Na temat wsparcia procesorów dla tych instrukcji wektorowych założyłem dyskusję na forum. Koniec końców myślę jednak, że przyspieszenie obliczeń za ich pomocą (np. przez przerobienie wektorów i macierzy w bibliotece matematycznej na użycie SSE) nie jest takie proste. Przeszkodą jest np. wymagane dla typów __m64 i __m128 wyrównanie odpowiednio do 8 i 16 bajtów, które nie pozwala czytać sobie tych wektorów ot tak swobodnie, z dowolnych danych binarnych.
Comments | #algorithms #c++ #visual studio Share
# Compiler Intrinsics
Thu
27
Nov 2008
Pod hasłem Compiler Intrinsics kryje się w MSDN Library bardzo ciekawy rozdział. Opisuje niskopoziomowe funkcje, których dostarcza sam kompilator i które pozwalają wykorzystywać różne instrukcje asemblera bez sięgania po wstawki w tym trudnym języku, zwyczajnie jako funkcje C++. Pośród tych funkcji są np. wspomagające programowanie równoległe (jak _ReadWriteBarrier, _InterlockedCompareExchange), __emul mnożąca liczby 32-bitowe do liczby 64-bitowej, _rotl przesuwająca bity z zawinięciem czy __cpuid zwracająca informacje o możliwościach procesora.
Także wiele funkcji biblioteki standardowej C posiada swoje implementaje jako intrinsics, które powinny zamieniać się na instrukcje asemblera zamiast wywołań. Należą do nich np. abs, sin, pow, strlen, strcpy. Trzeba tylko je włączyć za pomocą #pragma intrinsic lub /Oi (Generate Intrinsic Functions).
W praktyce to nie jest takie proste. Zadeklarowanie strcpy jako intrinsic przyspieszyło wprawdzie mój test z 2.5439 do 2.4976 sekundy, ale ta funkcja kompiluje się do asemblerowego rep movs w konfiguracji Release niezależnie od jej zadeklarowania jako intrinsic. Z kolei cosf tak czy siak zamienia się na wywołanie call.
Comments | #c++ #visual studio Share
# Potęga breakpointów w Visual C++
Wed
29
Oct 2008
Używanie debuggera to podstawa efektywnego programowania. Na stawianiu breakpointów, pracy krokowej i podglądaniu wartości zmiennych nie trzeba jednak poprzestawać. Warto wiedzieć, że w Visual C++ można kliknąć prawym klawiszem myszy w czerwone kółeczko breakpointa i otwierają się wtedy nowe możliwości. Pośród nich jest "Condition", które pozwala wpisać warunek zatrzymania czy "Hit Count", które pozwala zatrzymać program tylko co któreś wejście do zaznaczonej instrukcji.
Najciekawsze jednak jest polecenie "When Hit", które zamienia pułapkę w zdarzenie powodujące zalogowanie komunikatu do okienka Output. Można wtedy wpisać swój dowolny komunikat używając specjalnych zmiennych m.in. z nazwą funkcji bieżącej, funkcji nadrzędnej oraz dowolnego wyrażenia z wykorzystaniem dostępnych w danym miejscu zmiennych. Dzięki temu można wstawiać do programu drukowania kontrolne bez modyfikowania źródła i przekompilowania swojego programu.
Comments | #visual studio Share
# Visual C++ - rozszerzenia Microsoftu
Tue
14
Oct 2008
Visual C++ oferuje wiele rozszerzeń do standardu języka C++. Jeżeli tylko można sobie pozwolić na ograniczenie się do kompilatora Microsoftu, warto z nich korzystać. Na przykład:
Przykłady użycia:
char sz[128]; sprintf_s(sz, _countof(sz), "Liczba=%u", 123); void KlasaPochodna::Metoda() { __super::Metoda(); ... }
Dużo oferują też dyrektywy preprocesora #pragma. Na przykład pragma pack pozwala ustawić wyrównanie dla pól struktury czy klasy, once zastępuje tradycyjne zabepieczanie nagłówków za pomocą #ifndef, deprecated służy do zadeklarowania identyfikatora jako niezalecanego, a push_macro i pop_macro pozwala zapamiętywać i przywracać definicję makra.
Comments | #c++ #visual studio Share
# MSDN Library - warto ściągnąć
Sun
21
Sep 2008
Nowe! Ten wpis dotyczy starego MSDN Library. Aby przecztać o nowej dokumentacji w Visual Studio 2010, zapraszam do wpisu pt. Documentation in Visual CPP.
Nie pisałem chyba jeszcze o tym, a nieraz przekonałem się, że nie wszyscy o tym wiedzą. Chodzi o MSDN Library - dokumentację Microsoftu dla programistów, która zawiera m.in. opis obsługi Visual Studio, biblioteki standarowej C++, interfejsu WinAPI, OpenGL, języka C# i całej platformy .NET oraz jej biblioteki i wielu, wielu innych rzeczy. Każdy kto przestał korzystać tylko z przeczytanych tutoriali zagląda tam, żeby znaleźć opis danej funkcji czy poczytać, jak w Windows zaimplementować to czy tamto. Wiele osób, jak widzę, korzysta z tej dokumentacji w wersji online.
Tymczasem MSDN Library jest dostępny za darmo w wersji do pobrania, jako obraz płyty ISO zajmujący 2 GB. Na tej płycie leży instalator, który pozwala zainstalować na dysku wybrane części dokumentacji. Posiadanie MSDN Library zainstalowanego lokalnie ma wiele zalet: 1. Działa szybciej, 2. Działa nawet kiedy Internet wysiądzie, 3. Oprócz drzewiastego spisu treści i wyszukiwania pełnotekstowego (które wbrew pozorom jest niezbyt użyteczne) posiada indeks, czyli alfabetyczny spis wszystkich funkcji i innych tematów. On jest naprawdę bardzo przydatny i m.in. dzięki niemu nie wyobrażam sobie korzystania z MSDN Library przez Internet, zawsze mam zainstalowany na swoim dysku.
Comments | #visual studio #tools #web Share
# Wyszukiwanie inkrementacyjne
Wed
17
Sep 2008
Tematu wyszukiwania ciąg dalszy... Każdy edytor tekstu ma wyszukiwanie Ctrl+F, ale od pewnego czasu twórcy interfejsów użytkownika wiedzą, że brak okienek dialogowych i natychmiastowa odpowiedź jest lepsza. Dlatego wiele edytorów ma wyszukiwanie inkrementacyjne (czy jak to tam ładnie po polsku nazwać :P) - takie, w którym można wpisywać kolejne litery i one się od razu wyszukują.
Na przykład w Visual C++ służy do tego skrót Ctrl+I. Wpisywanie kolejnych znaków wprowadza tekst do wyszukania, Backspace kasuje, Ctrl+I znajduje następne wystąpienie, Ctrl+Shift+I poprzednie, a ESC wychodzi z trybu wyszukiwania. Z kolei w moim ulubionym edytorze tekstu - jEdit - taka funkcja jest dostępna pod skrótem Ctrl+, (przecinek).
Comments | #tools #software #gui #visual studio Share
# Debugger Visual C++ - Watches
Sat
13
Sep 2008
Z okienkiem podglądu zmiennych w debuggerze Visual C++ 2005/2008 można zrobić dużo ciekawych rzeczy. Można na przykład jako wyrażenie do podglądnięcia wpisać:
zmienna,10
- wyświetli jako tablicę 10 elementów
zmienna,x
- wyświetli jako liczbę szestanstkową
zmienna,s8
- wyświetli jako łańcuch UTF-8
zmienna,hr
- wyświetli jako komunikat błędu HRESULT
@err,hr
- pokaże kod i komunikat ostatniego błędu biblioteki standardowej C lub WinAPI
$handles
- aby zobaczyć liczbę uchwytów otwartych przez aplikację i łatwiej śledzić wycieki zasobów
Można też tworzyć wizualizery do swoich typów. Ten nieudokumentowany mechanizm opisuje artykuł na blogu autora VirtualDub - Writing custom visualizers for Visual Studio 2005. Trzeba tylko wyedytować plik autoexp.dat. Choć składnie ma dziwną, cały ten mechanizm jest zbugowany i nie zgłasza porządnie błędów składni, to jednak możliwości ma spore - w tym wbudowaną obsługę tablic, list łączonych, drzew, a do bardzo złożonych struktur danych możliwość pisania wizualizerów jako biblioteki DLL - tzw. EEAddIn (Expression Evaluator Add-In).
Comments | #visual studio Share
# Własne narzędzia w Visual C++
Tue
26
Aug 2008
Do projektu Visual C++ można dodać pliki o nieobsługiwanych domyślnie rozszerzeniach i ustawić ich obsługę tak, żeby podczas kompilowania projektu wszystkie takie pliki były przetwarzane przez określony program konsolowy. To może być na przykład generowanie parserów za pomocą Flex i Bison czy jakiekolwiek inne czynności, które wygenerują na podstawie plików źródłowych pliki docelowe, z przygotowanym kodem C++ lub inne.
Służą do tego dwa mechanizmy. Ten starszy to Custom Build Steps i Build Events. Ten nowy, bardziej potężny, dostępny od wersji Visual C++ 2005, nazywa się Custom Build Rules. Jego skonfigurowanie jest bardzo proste - wszystko da się wyklikać w oknach dialogowych.