
Late Binding using Function Pointers (C)
If I have eight hours for cutting wood, I spend six sharpening my axe.
Wednesday, August 25, 2010
Tuesday, August 24, 2010
Locks in Multi-processing/multi-thread programming
DeadLock:
A deadlock is a situation wherein two or more competing actions are each waiting for the other to finish, and thus neither ever does.
LiveLock:
A deadlock is a situation wherein two or more competing actions are each waiting for the other to finish, and thus neither ever does.
LiveLock:
A livelock is similar to a deadlock, except that the states of the processes involved in the livelock constantly change with regard to one another, none progressing. Livelock is a special case of resource starvation; the general definition only states that a specific process is not progressing.
A real-world example of livelock occurs when two people meet in a narrow corridor, and each tries to be polite by moving aside to let the other pass, but they end up swaying from side to side without making any progress because they both repeatedly move the same way at the same time.
Livelock is a risk with some algorithms that detect and recover from deadlock. If more than one process takes action, the deadlock detection algorithm can repeatedly trigger. This can be avoided by ensuring that only one process (chosen randomly or by priority) takes action.
new/delete operator
1. Return type of delete operator is void (not void*)
2. Exception and valid cases
char *p;
delete p; ==> exception (shown in picture)
Where as
char *p = 0;
delete p; .==> You can, however, use delete on a pointer with the value 0. This provision means that, when newreturns 0 on failure, deleting the result of a failed new operation is harmless.
2. Mixing both new/malloc and delete/free
class A {
public:
A() { cout << "Constructor" << endl;
~A() { cout << "Destructor" << endl;
};
int main() {
A *a = new A;
free(a); ==> Calls only constructor; not destructor
A *b = (A*)malloc(sizeof(A));
delete b; ==> Calls only destructor; not constructor
A *c = new A;
delete c; ==> Calls both constructor and destructor
}
2. Exception and valid cases
char *p;
delete p; ==> exception (shown in picture)
Where as
char *p = 0;
delete p; .==> You can, however, use delete on a pointer with the value 0. This provision means that, when newreturns 0 on failure, deleting the result of a failed new operation is harmless.
2. Mixing both new/malloc and delete/free
class A {
public:
A() { cout << "Constructor" << endl;
~A() { cout << "Destructor" << endl;
};
int main() {
A *a = new A;
free(a); ==> Calls only constructor; not destructor
A *b = (A*)malloc(sizeof(A));
delete b; ==> Calls only destructor; not constructor
A *c = new A;
delete c; ==> Calls both constructor and destructor
}
Monday, June 21, 2010
GDB unknown commands
All in gdb> prompt
1. Ctrl + p => To get the previous command
2. p array@sizeof(array) => To print all the array elements
3. set print pretty on => To print the structure elements' values in a neat way
4. p /x => prints the value in hexa decimal format
1. Ctrl + p => To get the previous command
2. p array@sizeof(array) => To print all the array elements
3. set print pretty on => To print the structure elements' values in a neat way
4. p /x
Tuesday, June 1, 2010
Thursday, April 1, 2010
Tuesday, March 30, 2010
VI keyboard Shortcuts
:set hlsearch (:nohl)
:set mouse=a
:set nocompatible
:set smartindent
:set nowrapscan (to disable the wrap search)
:highlight String ctermfg=red
:highlight search ctermfg=black
- use UP DOWN arrows (or j/k keys) to select the lines
- press I (shift + i) (this enters into visual mode)
- type "//"
- Once you press ESC, the // will be applied to all the lines you selected.
- select RIGHT LEFT arrows to select only the "//" characters
- press "d" (to delete all the // characters)
- To indent a block of code, keep the cursor in any of the {} braces, and do =%
- To comment a block of line, keep the cursor in the first line (from where you want to comment),
- use UP DOWN arrows (or j/k keys) to select the lines
- press I (shift + i) (this enters into visual mode)
- type "//"
- Once you press ESC, the // will be applied to all the lines you selected.
- To uncomment a block of code, keep the cursor in the first line (from where you want to uncomment)
- select RIGHT LEFT arrows to select only the "//" characters
- press "d" (to delete all the // characters)
- To search and replace a text ("src" to "dest"), use
:%s/src/dest/ ==> Replaces first occurence of "src" in each line
:%s/src/dest/g ==> Replaces all the occurences of "src" with "dest" in all the lines
:%s/src/dest/gc ==> Asks for confirmation to replace or not for each occurence
- Vimdiff commands:
- ]c - to go to the next change
- [c - to go to the previous change
- do - diff obtain; means get the changes from other file
- dp - diff put; means put the changes into other file
Sunday, March 28, 2010
Friday, March 26, 2010
Emacs Keyboard shortcuts
Movements:
M - f <==> Move forward by one word
M - b <==> Move backward by one word
C - f <==> Move forward by one letter
C - b <==> Move backward by one letter
C - p <==> Move up by one line
C - n <==> Move down by one line
M - v <==> PAGE UP
C - v <==> PAGE DOWN
M - > <==> Goto end of the file (U have to press "SHIFT" here to enter "<" )
M - < <==> Goto the beginning of the file (same as above)
File operations:
M - d <==> Delete next word
C - k <==> Delete current line
C - y <==> Paste (watever copied)
C - [space]<==> Start marking the portion
C - w <==> Cut the portion till the cursor is in currently
M - w <==> Copy the portion till the cursor is in currently
C - x u <==> Undo last operation
C - s [string] <==> To search a string forward
C - r [string] <==> To search a string backward
Windows:
C - x 0 <==> Close the current window
C - x 1 <==> Close all the windows except current window
C - x 2 <==> Split the current window vertically (means top and bottom)
C - x 3 <==> Split the current window horizontally (means left and right)
C - x o ('o' for 'others') <==> Switch between windows
Shell:
M -x shell <==> Open shell (terminal)
Setting Tab Size:
M - x set-variable [ENTER]c-basic-offset [ENTER] 8 <==> Setting tab size to 8
Auto-Indentation:
M -x indented-text-mode <==> set auto indent (does not work through putty)
To search for a string in all the files in a directory:
M - x grep-find [Enter] <==> This will generate a command; at the end of the command, give the string you want to search; and also set the directory in which you wana search
M - f <==> Move forward by one word
M - b <==> Move backward by one word
C - f <==> Move forward by one letter
C - b <==> Move backward by one letter
C - p <==> Move up by one line
C - n <==> Move down by one line
M - v <==> PAGE UP
C - v <==> PAGE DOWN
M - > <==> Goto end of the file (U have to press "SHIFT" here to enter "<" )
M - < <==> Goto the beginning of the file (same as above)
File operations:
C - x C- f <==> To open a file
C - x k <==> Close the current buffer (kill buffer)
M - d <==> Delete next word
C - k <==> Delete current line
C - y <==> Paste (watever copied)
C - [space]
C - w <==> Cut the portion till the cursor is in currently
M - w <==> Copy the portion till the cursor is in currently
C - x u <==> Undo last operation
M - g g <==> Goto the line
M - x replace-string <==> Search and replace
C - s [string] <==> To search a string forward
C - r [string] <==> To search a string backward
C - x 0 <==> Close the current window
C - x 1 <==> Close all the windows except current window
C - x 2 <==> Split the current window vertically (means top and bottom)
C - x 3 <==> Split the current window horizontally (means left and right)
C - x o ('o' for 'others') <==> Switch between windows
Shell:
M -x shell <==> Open shell (terminal)
Setting Tab Size:
M - x set-variable [ENTER]
M -x indented-text-mode <==> set auto indent (does not work through putty)
To search for a string in all the files in a directory:
M - x grep-find [Enter] <==> This will generate a command; at the end of the command, give the string you want to search; and also set the directory in which you wana search
Subscribe to:
Posts (Atom)